对不起,我的英语不好:)
我有一个问题,在一个iOS应用的Swift中解析JSON在Alamofire上的响应。我编写了一个函数来返回一个JSON响应字符串。我用阿拉莫火处理请求和响应,用SwiftyJSON处理JSON。在开始时,我声明一个名为jsonString的变量,其值为测试。然后,我向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)}
发布于 2014-09-24 02:59:32
在第一次单击中,代码
return self.jsonString
将在此之前
.response {
(request, response, data, error) -> Void in
let json = JSONValue(data as? NSData)
self.jsonString = json.rawJSONString
}
您将在第一次从self.jsonString中获得零,第二次单击将获得第一次单击的请求数据。
如果您使用SwiftyJSON和Alamofire,您可以尝试Alamofire-SwiftyJSON
发布于 2014-11-20 09:07:07
你也可以试着跑
dispatch_sync(dispatch_get_main_queue()) {
// insert code you need done the first time around - it will wait
}
发布于 2015-10-14 17:52:31
您遇到的问题是,您正在尝试同步返回异步方法的结果。
你有两个解决方案:
几分钟前,我在这个帖子上写了一个同样的问题的答复,我建议你检查一下:https://stackoverflow.com/a/33130512/422288
https://stackoverflow.com/questions/25956445
复制相似问题