【发布时间】:2018-02-10 13:35:35
【问题描述】:
实现这里给出的解决方案How to make a synchronous request using Alamofire?
我没有收到任何错误,只是没有按预期工作。在tableViewController中
override func viewDidLoad() {
super.viewDidLoad()
loadData() { (didCompleteRequest) in
if (didCompleteRequest) {
self.TodosTableView.delegate = self
self.TodosTableView.dataSource = self
print("loading successfull")
} else {
print("loading failed")
}
}
print("leaving viewDidLoad")
}
func loadData(completion: @escaping (Bool) -> Void) {
Alamofire.request(TodosViewController.serverAdress + "projects/index.json").responseJSON { response in
do {
// async stuff
} catch {
completion(false)
}
print("leaving loadData")
completion(true)
}
}
我得到的输出
离开 viewDidLoad
离开加载数据
加载成功
显然,第一个元素应该是最后一个
【问题讨论】:
-
这是异步请求,因此它不会等待完成您的
loadData,所以它正在移动到leaving viewDidLoad -
不相关,但您必须在
catch子句中添加return语句以避免调用完成闭包两次。输出的顺序是正确的,因为loadData()方法中的闭包稍后会异步返回其数据。 -
@vadian 不,我会补充的,谢谢。
-
@vadian 更好的是,移动
do块内 do/catch 块之后的内容(至少是第二个completion调用)。
标签: ios swift asynchronous