如何访问这些字典值? (Swift)
How to access these dictionary values? (Swift)
我有一个名为 eegsnapshot.swift 的文件,它从 EEG 传感器读取值并将它们存储在字典中(我想?)。我在尝试访问这些值时遇到问题。我是 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"]
和类似但我收到错误 "Type EEGSnapshot.Type has no subscript members"。
您可以像这样进行字典 <> 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
}
}
}
我有一个名为 eegsnapshot.swift 的文件,它从 EEG 传感器读取值并将它们存储在字典中(我想?)。我在尝试访问这些值时遇到问题。我是 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"]
和类似但我收到错误 "Type EEGSnapshot.Type has no subscript members"。
您可以像这样进行字典 <> 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
}
}
}