在swift中循环NSDictionary数组



好吧,为了赶上学习Swift的最后一班火车,我看到了类似的问题,但我没有得到它们来解决我的问题。

我有一个名为entriesNSDictionary,其中一个值对应于密钥"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的建议,并使用结构和/或类

以不同的方式对数据进行建模

最新更新