实施此处提供的解决方案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
加载成功
答案 0 :(得分:1)
第一个viewDidLoad
正在主线程中运行。因此,当您将loadData()
放入viewDidLoad
控件中,调度到alamofire工作的后台线程,主线程继续并打印离开viewDidLoad
试试这个
override func viewDidLoad() {
super.viewDidLoad()
self.TodosTableView.delegate = self
self.TodosTableView.dataSource = self
loadData() { (didCompleteRequest) in
if (didCompleteRequest) {
self.TodosTableView.reloadData()
print("loading successfull")
} else {
print("loading failed")
}
}
print("leaving viewDidLoad")
}
答案 1 :(得分:-1)
从服务器获取响应后,您将调用阻止代码。所以先调用“print(”,留下viewDidLoad“)”。
响应代码延迟,因此调用具有延迟的块代码