簡體   English   中英

Swift 3 - 未調用完成處理程序

[英]Swift 3 - completion handler not called

編輯:我正在使用Swift 3.0和Alamofire 4.0

在我的系統中,我有一個材料列表,每個材料都包含一個包列表。 我試圖通過webservice請求這些包,然后填充下一個視圖(在這個例子中我只是嘗試打印所提取的數據),但我的完成處理程序沒有被調用(ps:我是初學者,這是第一次我用異步編程領導。 知道為什么嗎?

從WS獲取數據的函數是:

  func fetchBundles(materialCode: String, completion: @escaping ([ProductsBundle]?) -> Void ) {
    var bundlesAdded = [ProductsBundle]()
    let url = baseApiURL + "material-cavaletes/" + materialCode
    print(url)

    Alamofire.request(url, headers: headers).responseJSON {
      response in
      if let result = response.result.value {
        var results = JSON(result)["results"]

        for res in results {
          bundlesAdded.append(self.getBundleFromJson(json: res))
        }

        completion(bundlesAdded)
      }
    }
  }

並且應該獲取數據並更新視圖的函數調用是:

WebApi.sharedInstance.fetchBundles(materialCode: materialBeingListed.id, completion: {
  (bundlesAdded: [ProductsBundle]?) in
  guard let myBundles = bundlesAdded else {
    print("erro")
    return
  }

  print (myBundles)
})

我在代碼中添加了一些斷點,並注意到“print(myBundles)”這一行從未被調用過。 我不知道為什么... :(

我想你可能錯誤地處理了你的Alamofire請求。 嘗試這個:

Alamofire.request(url, headers: headers).responseJSON {
  response in
    switch response.result {
      case .success(let data):
        let json = JSON(data)
        print("JSON: \(json)")
        break
      case .failure(let error):
        print("Fetch failed :( error: \(error.localizedDescription)")
        switch(error._code) {
          case NSURLErrorTimedOut:
            print("Timed Out")
          default:
            print(error._code)
        }
    }
}

一旦看到JSON數據的樣子,您就應該能夠正確訪問它。 通常,當您對其進行反序列化時,JSON將成為一個Dictionary。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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