【发布时间】:2017-02-19 00:52:39
【问题描述】:
我正在尝试使用Alamofire 进行同步请求。我查看了 Stackoverflow 并发现了这个问题:making an asynchronous alamofire request synchronous。
我看到接受的答案使用completion 使Alamofire 请求同步,但我无法使其工作。这是我的简化代码:
func loadData(completion: (Bool)) -> (Int, [String], [String], [String]){
Alamofire.request(url!, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON { response in
switch(response.result) {
case .success(_):
if let JSON = response.result.value as! [[String : AnyObject]]!{
//Here I retrieve the data
}
completion(true)
break
case .failure(_):
print("Error")
completion(false)
break
}
}
return (numberRows, nameArray, ageArray, birthdayArray)
}
使用此代码,我在尝试制作 completion(bool value) 时遇到错误。我得到的错误如下:
不能调用非函数类型'Bool'的值
我尝试使用很多示例使用完成来同步获取值(因为我需要先检索数据才能将其显示在表上,同时获取该表的行数)但没有成功。
如何使用该完成来获得同步响应?
提前致谢!
【问题讨论】:
-
我建议您实现自己的方法。 Apple 强烈反对同步网络调用。看看这个:stackoverflow.com/questions/31557688/…
-
github.com/Alamofire/Alamofire/issues/1147,你必须看到这个博客。希望这会对你有所帮助。
-
您似乎不了解异步方法的工作原理,尤其是完成回调。与其强制同步调用,不如将精力投入到理解异步编程上。
标签: ios swift alamofire synchronous