【发布时间】:2020-06-27 00:20:11
【问题描述】:
我有这段代码来获取通过调用迭代从 JSON 解析的 id 和名称列表。
问题是我不知道如何获得通知,简单的 print("finished") 就可以了。我尝试在“for”循环之后使用打印命令,但它也会迭代。
有人知道吗?
代码如下:
override func viewDidLoad() {
super.viewDidLoad()
//Manager
let manager = SessionManager.default.startRequestsImmediately = false
//País
let paisRequest = Alamofire.request(self.cadastro_pais_url, method: .post, parameters: self.cadastro_pais_params).responseString { response in
do { } catch { print("error") }
}
for i in 0...2000 {
DispatchQueue.main.async {
let patrocinadorRequest = Alamofire.request(self.buscaPatrocinador, method: .post, parameters: ["patrocinador":"\(i)"]).responseJSON { (responseData) -> Void in
if((responseData.result.value) != nil) {
let swiftyJsonVar = JSON(responseData.result.value!)
if !(swiftyJsonVar["integracao"] == JSON.null){
print("\(swiftyJsonVar["integracao"]),\(swiftyJsonVar["nome"]),")
} else {}
} else {
print("Error")
}
}
//Requests Chain
let chain = RequestChain(requests: [paisRequest, patrocinadorRequest])
chain.start { (done, error) in
}
}
}
}
【问题讨论】:
-
尝试使用 CodyFire lib 会好很多github.com/MihaelIsaev/CodyFire
-
我不确定这是否是一种不好的做法。但是由于你的 for 循环中有硬编码的值,你可以检查 'if i == 2000'。但不确定是否建议这样做。我会用另一种方法解决这个问题(并在 viewDidLoad 中使用尽可能少的代码),然后使用“@escaping”块。在'DispatchQueue.main.async'中我会返回方法
-
我建议您不要以这种方式创建请求,尤其是在使用 Alamofire 4 时,因为 Alamofire 4 在这样使用时会出现缩放问题。相反,您应该一次将您的请求分成可能 6 个的批次,并在其他请求完成时运行您的其他请求。
标签: swift for-loop request alamofire dispatch-async