我有这个代码:
var jsonResult = (try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)) as! NSDictionary
var count = jsonResult["levels"]!.count as Int
for var i=0; i<count; ++i {
let obj = jsonResult["levels"]![i] as! NSDictionary
...
}
在最后一行,我收到了这个错误:
下标的使用不明确
我该如何解决此问题?
这段代码已经运行了一段时间,但随着xcode 7.1的升级,它崩溃并停止了工作。
您必须告诉编译器行中的中间对象是什么
let obj = jsonResult["levels"]![i] as! NSDictionary
在语句jsonResult["levels"]!
之后,编译器不知道他正在处理什么类型的对象。你必须告诉它这是NSArray
或其他东西:
let obj = (jsonResult["levels"] as! NSArray)[i] as! NSDictionary
当然,您还应该确保您实际上可以进行所有的转换,并且json中的对象确实是预期的类型。
通过直接投射到NSDictionary
:的阵列,只使用一次投射,甚至更短一点
let obj = (jsonResult["levels"] as! [NSDictionary])[i]
推理保持不变:告诉编译器什么类型的jsonResult["levels"]
。它应该是一个包含NSDictionary
s的数组。
在新的Swift更新中。您应该使用objectForKey("yourKey")
方法而不是["yourKey"]
来获取您的值。在您的情况下,
let obj = jsonResult.objectForKey("levels")![i] as! NSDictionary