如何使用Swift API响应回调块

qfe3c7zg  于 2023-10-15  发布在  Swift
关注(0)|答案(1)|浏览(103)

我想在顺序处理以下代码后返回值。它与Android非常不同,所以即使我看了很多文章,也无法得到我想要的答案。
最后。我希望alamofire被调用后应用的值。
这是我的简化代码。
getParams代码

func getParams() -> [String: Any] {
  val params:[String:Any] = [:]

  for i in 0 ... 5 {
    self.getAPI { completion in

      params[i] = completion
 
      print("test1")
    }
  }

  print("test2")
  return params
}

getAPI代码

func getAPI(completion: @escaping([String: String]) -> Void) {

  api(command:"Test", method: "get") { (statusCode, result) in
    if statusCode == 200 {
      if let data = result["data"] as? [String: String] {
        completion(data) // <<-- data is like {"age": "14", "sex":"M", "name":"jenny"}
      }
    }else{
      completion([:])
    }
  }
}

我的params什么都没有。打印顺序如下。test2 -> test1 -> test1 ->.

flseospp

flseospp1#

完成处理程序不能保证在函数getParams完成之前运行。实际上,假设您看起来像是在发出HTTP请求,那么您几乎可以保证在getParams完成之前不会调用完成处理程序。params在返回时肯定是空的。
您需要从完成处理程序中启动所有剩余的功能。此外,失败路径需要做一些事情,而不是仅仅扔掉响应。
事实上,您可能希望将完成处理程序的每个后续调用与前一个调用链接起来,否则它们将不一定以正确的顺序返回。

相关问题