2015-11-08 4 views
5

У меня есть этот код:Неоднозначное использование индексного Xcode 7.1

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 
    ... 
} 

На последней строке я получаю эту ошибку:

Ambiguous use of subscript

Как я могу решить эту проблему?

Этот код работал некоторое время, но с обновлением до xcode 7.1 он сломался и прекратил работать.

ответ

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 с.

0

В новом обновлении Swift. Вы должны получить свою ценность с помощью метода objectForKey("yourKey"), а не ["yourKey"]. В вашем случае,

let obj = jsonResult.objectForKey("levels")![i] as! NSDictionary 
Смежные вопросы