Swift完成处理程序未在第二个呼叫功能上调用



我在完成某个网络请求时,我想调用一个快速函数,该函数要被调用。如果服务器响应显示更多数据(提供offset),则可以根据网络请求进行重复。

我最初这样称呼它:

func myMainFunction(){
  getTasks(project: project, paginationToken: nil) {
    print("This never fires...")
  }
}

和我的getTasks()功能是这样的:

func getTasks(project: Project, paginationToken: String?, completion: @escaping () -> Void){
  var url = "..."
  if let token = paginationToken{
    url += "&offset=(token)"
  }
  Alamofire.request(url).responseJSON { response in  
    switch response.result {
    case .success(let value):
      let json = JSON(value)
      //...
      //Check for pagination
      let offset = json["next_page"]["offset"].stringValue
      if !offset.isEmpty{
        //Theres a pagination token available, go again!
        getTasks(project: project, paginationToken: offset){}
      }else{
        print("This prints to the log on the last run through")
        completion()
      }
    case .failure(let error):
      print("Task error: (error)")
    }
  }
}

如果永远没有offset,则completion()处理程序正常工作。但是,如果必须再次调用getTasks(),则完成处理程序以某种方式无效,并且永远不会返回我的原始myMainFunction()

有什么想法?

如果偏移不为空,则您将通过空闭合。您需要将完成参数转发到getTasks。尝试一下。

//...
if !offset.isEmpty {
    getTasks(project: project, paginationToken: offset, completion: completion)
}
//...

最新更新