Swift 词典混淆

Swift Dictionary confusion

说我有

var dict = parseJSON(getJSON(url)) // This results in an NSDictionary

为什么是

let a = dict["list"]![1]! as NSDictionary
let b = a["temp"]!["min"]! as Float

允许,并且:

let b = dict["list"]![1]!["temp"]!["min"]! as Float

导致错误:

Type 'String' does not conform to protocol 'NSCopying'

请解释为什么会这样,请注意,我是 Swift 的新手,没有任何经验。

dict["list"]![1]! returns 一个未知的对象 (AnyObject),如果没有正确的转换,编译器无法知道返回的对象是一个字典

在您的第一个示例中,您正确地将返回值转换为字典,然后才能提取您期望的值。

修改@giorashc 的答案:使用像

这样的显式转换
let b = (dict["list"]![1]! as NSDictionary)["temp"]!["min"]! as Float

但在这些情况下将其拆分更易读。