我想在顺序处理以下代码后返回值。它与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 ->.
1条答案
按热度按时间flseospp1#
完成处理程序不能保证在函数
getParams
完成之前运行。实际上,假设您看起来像是在发出HTTP请求,那么您几乎可以保证在getParams
完成之前不会调用完成处理程序。params
在返回时肯定是空的。您需要从完成处理程序中启动所有剩余的功能。此外,失败路径需要做一些事情,而不是仅仅扔掉响应。
事实上,您可能希望将完成处理程序的每个后续调用与前一个调用链接起来,否则它们将不一定以正确的顺序返回。