簡體   English   中英

如何訪問這些字典值? (迅速)

[英]How to access these dictionary values? (Swift)

我有一個名為eegsnapshot.swift的文件,該文件從EEG傳感器讀取值並將它們存儲在字典中(我認為呢?)。 我在嘗試訪問這些值時遇到麻煩。 我是Swift的新手,已經對Arrays和Dictionaries做過一些工作,但是這里使用的方法比我以前遇到的要復雜得多。

誰能給我一些從字典中訪問值的見解,例如“ eegDelta”?

我希望使用這些值來控制SceneKit中的動畫,但需要能夠首先訪問它們。

public struct EEGSnapshot {
    public let delta: Int
    public let theta: Int
    public let lowAlpha: Int
    public let highAlpha: Int
    public let lowBeta: Int
    public let highBeta: Int
    public let lowGamma: Int
    public let highGamma: Int

public static let allZeros = EEGSnapshot()

public init(dictionary: NSDictionary = [:]) {
    func extractPoint(key: String) -> Int {
        return dictionary[key] as? Int ?? 0
    }

    delta = extractPoint("eegDelta")
    theta = extractPoint("eegTheta")
    lowAlpha = extractPoint("eegLowAlpha")
    highAlpha = extractPoint("eegHighAlpha")
    lowBeta = extractPoint("eegLowBeta")
    highBeta = extractPoint("eegHighBeta")
    lowGamma = extractPoint("eegLowGamma")
    highGamma = extractPoint("eegHighGamma")

}


}



public extension NSDictionary {
    public convenience init(eegSnapshot: EEGSnapshot) {
    self.init(objects: [eegSnapshot.delta, eegSnapshot.theta,  eegSnapshot.lowAlpha, eegSnapshot.highAlpha, eegSnapshot.lowBeta, eegSnapshot.highBeta, eegSnapshot.lowGamma, eegSnapshot.highGamma],
        forKeys: ["eegDelta", "eegTheta", "eegLowAlpha", "eegHighAlpha", "eegLowBeta", "eegHighBeta", "eegLowGamma", "eegHighGamma"],
        count: 8)

       }

}

我試過了

var deltaValue = EEGSnapshot["eegDelta"]

相似,但出現錯誤“ Type EEGSnapshot.Type沒有下標成員”。

您可以像這樣執行Dictionary <> EEGSnapshot轉換:

public struct EEGSnapshot {

    public let delta: Int
    public let theta: Int
    public let lowAlpha: Int
    public let highAlpha: Int
    public let lowBeta: Int
    public let highBeta: Int
    public let lowGamma: Int
    public let highGamma: Int

    public static let allZeros = EEGSnapshot()

    public init(dictionary: [String : Int] = [:]) {

        self.delta = dictionary["eegDelta"] ?? 0
        self.theta = dictionary["eegTheta"] ?? 0
        self.lowAlpha = dictionary["eegLowAlpha"] ?? 0
        self.highAlpha = dictionary["eegHighAlpha"] ?? 0
        self.lowBeta = dictionary["eegLowBeta"] ?? 0
        self.highBeta = dictionary["eegHighBeta"] ?? 0
        self.lowGamma = dictionary["eegLowGamma"] ?? 0
        self.highGamma = dictionary["eegHighGamma"] ?? 0
    }

    public var dictionary: [String : Int] {

        return [
            "eegDelta" : self.delta,
            "eegTheta" : self.theta,
            "eegLowAlpha" : self.lowAlpha,
            "eegHighAlpha" : self.highAlpha,
            "eegLowBeta" : self.lowBeta,
            "eegHighBeta" : self.highBeta,
            "eegLowGamma" : self.lowGamma,
            "eegHighGamma" : self.highGamma
        ]
    }
}

如果要為EEGSnapshots下標,例如快照[“ key”],則必須添加下標支持:

迅捷下標

extension EEGSnapshot {

    public subscript(key: String) -> Int {

        switch key {

            case "eegDelta":
                return self.delta

            case "eegTheta":
                return self.theta

            case "eegLowAlpha":
                return self.lowAlpha

            case "eegHighAlpha":
                return self.highAlpha

            case "eegLowBeta":
                return self.lowBeta

            case "eegHighBeta":
                return self.highBeta

            case "eegLowGamma":
                return self.lowGamma

            case "eegHighGamma":
                return self.highGamma

            default:
                return 0
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM