AnyObject? doesn't have a member named 'objectAtIndex'

An error occurred (Xcode6 BETA 6) if you try to get a string object:

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 is never called, it causes an error. Any idea?

+4
source share
3 answers

Retrieving a value from an NSDictionary or NSArray returns an AnyObject. Therefore, you must type the type for the corresponding type. try it

println(((jsonResult.objectAtIndex(0) as NSDictionary).objectForKey("name") as NSArray).objectAtIndex(0))
+10
source

I would suggest creating one or more classes and deserializing this JSON in order to better access the data and avoid access errors.

By the way, making data types more explicit, it works:

let dict = jsonResult.objectAtIndex(0) as NSDictionary
let array = dict["name"] as NSArray

println(array.objectAtIndex(0))
+1
source

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])
}
+1

All Articles