说我有
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
导致错误:
键入' String'不符合协议' NSCopying'
请解释为什么会发生这种情况,请注意我是Swift的新手并且没有经验。
答案 0 :(得分:3)
dict["list"]![1]!
返回一个尚未知的对象(AnyObject
)并且没有正确的强制转换,编译器无法知道返回的对象是字典
在第一个示例中,您将返回的值正确地转换为字典,然后才能提取您期望的值。
答案 1 :(得分:2)
修改@giorashc的答案:使用像
这样的显式转换let b = (dict["list"]![1]! as NSDictionary)["temp"]!["min"]! as Float
但在这些情况下,拆分它更具可读性。