[英]Why doesn't my completion block work?
實現這里給出的解決方案如何使用 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
加載成功
顯然,第一個元素應該是最后一個
首先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")
}
從服務器獲得響應后,您正在調用塊代碼。 所以首先調用“打印(“離開viewDidLoad”)”。
響應代碼延遲獲取所以調用塊代碼延遲
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.