Swift 3 - 未调用完成处理程序

时间:2016-12-28 20:47:05

标签: ios swift asynchronous

编辑:我正在使用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)”这一行从未被调用过。我不知道为什么...... :(

1 个答案:

答案 0 :(得分:0)

我认为您可能错误地处理了您的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。