AFNetworking and Swift - Save json response

afnetworking, afnetworking-2, json, swift

Solution

You're not getting a response from that function, because the GET operation happens asynchronously. That is, the order of execution looks like this:

You call `makeGet`

`makeGet` creates `manager`, which fires off a GET request

`makeGet` finishes executing and returns an empty string

(some time later) `manager` receives a value back from the server and executes either the `success` or `failure` block.

So the only time you have access to the JSON that comes back from the server is in step 4, and you need to find a way of storing that value so you can parse it or use it or whatever. There are a variety of options here -- one is to define closures that call event handlers on your class instance, like this:

class MyClass {

    func jsonLoaded(json: String) {
        println("JSON: \(json)")
    }

    func jsonFailed(error: NSError) {
        println("Error: \(error.localizedDescription)")
    }

    func makeGet(place:String) {        
        let manager = AFHTTPRequestOperationManager()
        manager.requestSerializer.setValue("608c6c08443c6d933576b90966b727358d0066b4", forHTTPHeaderField: "X-Auth-Token")
        manager.GET("http://something.com/api/\(place)",
            parameters: nil,
            success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) in
                self.jsonLoaded(responseObject.description)
            },
            failure: { (operation: AFHTTPRequestOperation!, error: NSError!) in
                self.jsonFailed(error)
            }
        )
    }

}

Problem

I want to make a GET request in swift to get some Json data. I tried to use AFNetworking and it works, but I don't know how to return the Json I get. I tried with a `return` but it's made before the GET so I get nothing... ``` func makeGet(place:String) -> String { var str:String = "" let manager = AFHTTPRequestOperationManager() manager.requestSerializer.setValue("608c6c08443c6d933576b90966b727358d0066b4", forHTTPHeaderField: "X-Auth-Token") manager.GET("http://something.com/api/\(place)", parameters: nil, success: { (operation: AFHTTPRequestOperation!,responseObject: AnyObject!) in str = "JSON: \(responseObject.description)" println(str) //print the good thing }, failure: { (operation: AFHTTPRequestOperation!,error: NSError!) in str = "Error: \(error.localizedDescription)" }) return str //return "" } ``` Can you help me ?

Original source