你應該使用調度組,進入組發出請求之前,和離開該組中的請求完成處理。所以,讓我們假設,第二,你有這樣的執行異步請求的一些方法,但提供的,這是一個將被調用時,網絡請求進行封閉完成處理程序參數:
func perform(request: URLRequest, completionHandler: @escaping() -> Void) { ... }
啓動他們完成時,這兩個併發請求,並且被通知,你會做這樣的事情:
let group = DispatchGroup()
group.enter()
perform(request: first) {
group.leave()
}
group.enter()
perform(request: second) {
group.leave()
}
group.notify(queue: .main) {
print("both done")
}
顯然,你的perform(request:)
實現可能顯著變化(例如,您可能具有關閉將數據傳遞迴),但無論您是使用URLSession
編寫自己的網絡代碼,還是使用相同的模式,或者使用Alamofire。只需使用GCD組,在創建請求時輸入組,並將該組留在異步請求的完成處理程序中。
來源
2016-09-16 16:10:43
Rob
GCD或NSOperationqueue都可以使用。 GCD:檢查了這一點[http://stackoverflow.com/questions/37805885/how-to-create-dispatch-queue-in-swift-3][1] – user6837640