AFNetworking 和 Swift -保存 json 响应

发布时间: 2017/3/4 19:19:05
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想要在一个 GET 请求 swift 以获取一些 Json 数据。 我试着用 AFNetworking 和它的工作,但我不知道如何返回我得到的 Json。

我试图与 return 但它由前得到,所以我得到什么...

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

你可以帮我吗?

解决方法 1:

你得不到响应从该函数,因为 GET 操作异步发生。那就是,执行的顺序如下所示︰

  1. 你叫makeGet

  2. makeGet创建 manager ,其中触发一个 GET 请求

  3. makeGet执行完毕后,返回一个空字符串

  4. (一些时间后) manager接收从服务器返回的值并执行任何 successfailure 块。

您有权访问返回来自服务器的 JSON 的唯一时间是在第 4 步,所以你需要找到存储该值,以便您可以解析它,或使用它或任何一种方式。有各种选项在这里 — — 一是定义对您的类的实例,这样调用事件处理程序的关闭︰

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

}
赞助商