好吧,为了赶上学习Swift的最后一班火车,我看到了类似的问题,但我没有得到它们来解决我的问题。
我有一个名为entries
的NSDictionary
,其中一个值对应于密钥"TYPES"
,是NSDictionaries的NSArray
。我试图在后一个NSDictionary
上循环,并检索密钥"TID"
的整数值,我正在做:
for dict in entries["TYPES"] as NSDictionary {
let tid : Int = typeDict["TID"]
}
但我收到的是错误:(key: AnyObject, value: AnyObject)
没有名为"subscript"的成员
我知道这是由于entries["TYPES"]
是anyObject!
,并且来自Xcode 6 beta 6,在那里,大量的Foundation API已经过可选一致性审计,因此需要展开,但我已经尽力展开,但没有成功,编译器总是抱怨不同的事情。有人知道怎么做吗?
如果这是您的字典示例:
var entries: NSDictionary = [
"TYPES": [
[],
["TPD": 2],
["TID": 4]
] as NSArray
]
你必须:
- 检索由
TYPES
密钥标识的元素,并尝试强制转换为NSArray
- 循环遍历数组的所有元素
- 尝试将每个元素强制转换为
NSDictionary
- 检查是否存在
TID
密钥,并读取其值 - 如果值不为零,则搜索结束
这是代码:
var tid: Int?
if let types = entries["TYPES"] as? NSArray {
for type in types {
if let dict = types.lastObject as? NSDictionary {
tid = dict["TID"] as? Int
if tid != nil {
break
}
}
}
}
使用示例数据在操场上运行代码,我看到的输出是{Some 4}
。
然而,我会考虑@Zaph的建议,并使用结构和/或类