在swift中循环一系列NSDictionaries

时间:2014-09-14 20:27:54

标签: ios for-loop swift nsdictionary

好的,试着赶上最后一班去学习Swift的火车,我看到过类似的问题,但我没有让他们解决我的问题。

我有一个名为NSDictionary的{​​{1}},其中一个与密钥entries对应的值是NSDictionaries的"TYPES"。我试图遍历后一个NSArray并检索键NSDictionary的整数值,我正在做:

"TID"

但我收到错误:for dict in entries["TYPES"] as NSDictionary { let tid : Int = typeDict["TID"] } 没有名为'subscript'的成员

我理解这是由于(key: AnyObject, value: AnyObject)entries["TYPES"]而来自Xcode 6 beta 6,其中大量的Foundation API已经过审核以获得可选的一致性,因此需要解包但我已经尝试了最好解开没有成功,编译器总是抱怨不同的东西。有人知道怎么做吗?

1 个答案:

答案 0 :(得分:9)

如果这是您的词典样本:

var entries: NSDictionary = [
    "TYPES": [
        [],
        ["TPD": 2],
        ["TID": 4]
    ] as NSArray
]

你必须:

  • 检索由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
            }
        }
    }
}

在带有示例数据的游乐场中运行代码,我看到的输出是{Some 4}

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