我有这段代码:
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的升级,它破坏并停止工作。
答案 0 :(得分:19)
你必须告诉编译器中间对象在行
中是什么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。
答案 1 :(得分:0)
在新的Swift更新中。您应该使用objectForKey("yourKey")
方法而非["yourKey"]
获取价值。在你的情况下,
let obj = jsonResult.objectForKey("levels")![i] as! NSDictionary