对不起,我的英语不好 :)
我在通过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)}
第一次点击,代码
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句