一尘不染

在Swift中使用Alamofire处理JSON响应

swift

对不起,我的英语不好 :)

我在iOS应用程序的Swift中通过Alamofire解析JSON响应时遇到问题。我编写了一个函数来返回JSON响应字符串。请求和响应处理我做Alamofire和JSON处理我做SwiftyJSON。首先,我声明一个名为
jsonString的变量 ,其值为 test 。然后,我向REST服务发出请求,并通过单击按钮获得JSON响应。我想使用函数
ping(url:String) 返回此响应。最后,我将返回的响应打印为测试。但是在第一次单击按钮时,从 ping 返回的值是
test
而不是响应的JSON字符串。在第二次单击按钮,我得到正确的返回值。为什么我有这个问题。Alamofire是否请求异步操作?我想等待回应。如何解决该问题,以便在首次点击时获得正确的值,而不是作为价值进行
测试

这是我的代码:

var jsonString:String = "test"

func ping(url:String) -> String {

    Alamofire.request(.GET, url)
        .response {
            (request, response, data, error) -> Void in

            let json = JSONValue(data as? NSData)
            self.jsonString = json.rawJSONString
    }

    return self.jsonString
}

@IBAction func checkOnlineStatus(sender: UIButton) {

    let response:String = ping("http://test.com")

    println(response)}

阅读 529

收藏
2020-07-07

共1个答案

一尘不染

第一次点击,代码

return self.jsonString

将在之前运行

.response {
        (request, response, data, error) -> Void in

        let json = JSONValue(data as? NSData)
        self.jsonString = json.rawJSONString
}

您将在第一时间从self.jsonString获得nil,第二次单击将获得第一次单击的请求数据。

如果您使用SwiftyJSON和Alamofire,则可以尝试Alamofire-
SwiftyJSON

2020-07-07