在swift中循环一系列NSDictionaries

Fab*_*eri 1 for-loop nsdictionary ios swift

好的,试图抓住最后一班火车来学习斯威夫特,我看到了类似的问题,但我没有让他们解决我的问题.

我有一个NSDictionary被调用的entries,其中一个值对应于key "TYPES"是一个NSArrayNSDictionaries.我试图循环后者NSDictionary并检索键的整数值"TID",我正在做:

for dict in entries["TYPES"] as NSDictionary {
   let tid : Int = typeDict["TID"]
}
Run Code Online (Sandbox Code Playgroud)

但我收到的错误是:(key: AnyObject, value: AnyObject)没有名为'下标'的成员

我知道这是由于entries["TYPES"]存在anyObject!并来自Xcode 6 beta 6,其中大量的Foundation API已经过审计,可选的一致性,因此需要解包但我尽力解开没有成功,编译器总是抱怨不同事情.有人知道怎么做吗?

Ant*_*nio 9

如果这是您的字典示例:

var entries: NSDictionary = [
    "TYPES": [
        [],
        ["TPD": 2],
        ["TID": 4]
    ] as NSArray
]
Run Code Online (Sandbox Code Playgroud)

你必须:

  • 检索由TYPES键标识的元素,并尝试强制转换为NSArray
  • 循环遍历数组的所有元素
  • 尝试将每个元素转换为 NSDictionary
  • 检查TID密钥是否存在,并读取其值
  • 如果值不是nil,则搜索结束

这是代码:

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
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用示例数据在操场上运行代码,我看到的输出是{Some 4}.

但是,我会考虑@ Zaph的建议并使用结构和/或类以不同的方式对数据进行建模