簡體   English   中英

為什么我的完成塊不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM