下标xcode 7.1的模糊使用

时间:2015-11-08 09:54:00

标签: ios swift swift2

我有这段代码:

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的升级,它破坏并停止工作。

2 个答案:

答案 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