AnyObject? не имеет члена с именем 'objectAtIndex'
Получил ошибку (Xcode6 BETA 6), если попытался получить объект строки:
let jsonString : String = "[{\"name\":[\"Fred\",\"John\"],\"age\":21},{\"name\":\"Bob\",\"age\":35}]"
let myData:NSData? = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
var jsonResult:NSArray = NSJSONSerialization.JSONObjectWithData(myData!, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSArray
println(jsonResult.objectAtIndex(0).objectForKey("name").objectAtIndex(0))
print никогда не вызывается, причина ошибки. Есть идеи?
3 ответа
Решение
Получение значения из NSDictionary или NSArray возвращает объект AnyObject. Поэтому вы должны набрать приведение к соответствующему типу. Попробуй это
println(((jsonResult.objectAtIndex(0) as NSDictionary).objectForKey("name") as NSArray).objectAtIndex(0))
Другим вариантом было бы разыграть jsonResult
для Array<AnyObject>
и использовать subscript
синтаксис для получения необходимого значения
let jsonString : String = "[{\"name\":[\"Fred\",\"John\"],\"age\":21},{\"name\":\"Bob\",\"age\":35}]"
let myData:NSData? = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
var jsonResult: AnyObject = NSJSONSerialization.JSONObjectWithData(myData!, options: NSJSONReadingOptions.MutableContainers, error: nil);
if let lJsonArray = jsonResult as? Array<AnyObject> {
println(lJsonArray[0].objectForKey("name")[0])
}
Я бы предложил создать один или несколько классов и десериализовать этот JSON, чтобы улучшить доступ к данным и избежать ошибок при доступе.
Кстати, делая типы данных более явными, это работает:
let dict = jsonResult.objectAtIndex(0) as NSDictionary
let array = dict["name"] as NSArray
println(array.objectAtIndex(0))