我有以下代码:

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的数组。

关于ios - 下标xcode 7.1的使用不明确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37238363/

10-13 04:26