如何在 Swift 中使用 DispatchQueue 循环遍历 Alamofire 请求后得到通知?

How to get notified after looping through Alamofire requests using DispatchQueue in Swift?

我有此代码来获取通过调用迭代从 JSON 解析的 ID 和名称列表。

问题是我不知道如何获得通知,一个简单的 print("finished") 就可以了。我尝试在 'for' 循环后使用 print 命令,但它也会重复。

有人知道吗?

代码如下:

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

            }
        }
    }
}

网络请求不应该在主线程上完成,而应该在后台线程上完成,sync 或 async。主线程只保留给 UI 的东西,除非你想强制阻塞用户界面。 您可以使用 Dispatch GroupDispatchQueue 来组织您的代码和完成后的通知。使用 Semaphore...

可以获得相同的结果

样本:

let dispatchGroup = DispatchGroup()
// change the quality of service based on your needs
let queue = DispatchQueue(label: "com.Whosebug", qos: .background)

for i in 0...2000 {
  dispatchGroup.enter()
  // Perform on background thread, async
  queue.async {
    Alamofire.request { response in
      dispatchGroup.leave()
      // ...
    }
  }
}

dispatchGroup.notify(queue: .main, execute: {
  print("DONE WITH ALL REQUESTS")
})

希望对您有所帮助。