微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AFNetworking和Swift – 保存json响应

我想在 swift中发出一个GET请求来获取一些Json数据.
我尝试使用AFNetworking并且它有效,但我不知道如何返回我得到的Json.

我尝试了返回,但它是在GET之前制作的,所以我什么都没得到……

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!,respon@R_502_6221@bject: AnyObject!) in
            str = "JSON:  \(respon@R_502[email protected])"
            println(str) //print the good thing
        },failure: { (operation: AFHTTPRequestOperation!,error: NSError!) in
            str = "Error: \(error.localizedDescription)"
        })
    return str //return ""
}

你能帮助我吗 ?

解决方法

您没有从该函数获得响应,因为GET操作是异步发生的.也就是说,执行顺序如下:

>你打电话给makeGet
> makeGet创建管理器,它会触发GET请求
> makeGet完成执行并返回一个空字符串
>(一段时间后)管理器从服务器接收一个值并执行成功或失败块.

因此,您可以访问从服务器返回的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)",respon@R_502_6221@bject: AnyObject!) in
                self.jsonLoaded(respon@R_502[email protected])
            },error: NSError!) in
                self.jsonFailed(error)
            }
        )
    }

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐