2016-03-17 59 views
0

我有一個名爲eegsnapshot.swift的文件,它從EEG傳感器讀取值並將它們存儲在字典中(我認爲?)。我無法訪問這些值。我對Swift很陌生,並且在數組和字典上做了一些工作,但這裏使用的方法比我之前遇到的方法更復雜。如何訪問這些字典值? (Swift)

任何人都可以給我一些洞察力來訪問字典中的值,例如「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"] 

和類似的,但我得到的錯誤 「類型EEGSnapshot.Type沒有標成員」。

+0

你是什麼意思「試圖訪問這些值的麻煩」?你是否得到他們?你有什麼錯誤嗎? –

+0

我不知道用什麼代碼來獲取值。我試過'var deltaValue = EEGSnapshot [「eegDelta」]'和類似的,但我得到錯誤「Type EEGSnapshot.Type沒有下標成員」。 – ChloeS

+0

嘗試'EEGSnapshot()[「eegDelta」]'以避免此錯誤。但我不確定是否有問題。爲了獲得任何字典的值,你應該使用'字典[「鍵」]' – Faruk

回答

0

你可以做字典<> 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 [ 「鑰匙」],那麼你必須添加標支持:

Swift Subscripts

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 
     } 
    } 
} 
+0

謝謝。這真的很有幫助! – ChloeS