对不起,我的英语不好 :)
我在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