I have read this question and trying to parse JSON from AFNetworking's responseObject in Swift but the result is always nil
.
Here is excerpt from my code:
let manager = AFHTTPRequestOperationManager()
manager.requestSerializer = AFJSONRequestSerializer()
manager.responseSerializer = AFJSONResponseSerializer()
manager.requestSerializer.setAuthorizationHeaderFieldWithUsername(username, password: password)
manager.POST("endpoint-that-respond-token-in-json",
parameters: nil,
success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) in
println(responseObject.description) // { token = "bd8f26da-219a-4a88-be80-b09207dfc067"; }
var x: NSString = responseObject.description
var error: NSError?
var data = x.JSONString().dataUsingEncoding(NSUTF8StringEncoding)
println(data) // <227b5c6e 20202020 746f6b65 6e203d20 5c226539 35613462 36642d38 6361612d 34343537 2d623937 612d3330 63613236 62316338 34315c22 3b5c6e7d 22>
var dataString = NSString(data: data, encoding: NSUTF8StringEncoding)
println(dataString) // "{\n token = \"e95a4b6d-8caa-4457-b97a-30ca26b1c841\";\n}"
var json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary!
println(json) // nil
},
failure: { (operation: AFHTTPRequestOperation!, error: NSError!) in
println(error)
})
N.B.
var json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary // without "!" I will get EXC_BAD_INSTRUCTION at run time.
You can cast the responseObject to dictionary
for example
manager.POST("endpoint-that-respond-token-in-json",
parameters: nil,
success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) in
println(responseObject.description) // { token = "bd8f26da-219a-4a88-be80-b09207dfc067"; }
let responseDict = response as Dictionary<String, AnyObject>
var token = responseDict["token"] as String!
println(token)
},
failure: { (operation: AFHTTPRequestOperation!, error: NSError!) in
})
p.s. the value return from dictionary always be optional
EDIT: After Xcode6 beta2 release, above code doest not work anymore. Need to cast it to AnyObject first then cast to string
let token : String? = (responseDict["token"] as AnyObject?) as? String
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With