gpt4 book ai didi

ios - 需要同时发出两个 HTTP 网络请求(完成处理程序一旦完成)

转载 作者:搜寻专家 更新时间:2023-10-30 22:03:23 25 4
gpt4 key购买 nike

我有这样一种情况,我需要发出两个 HTTP GET 请求并仅在两个请求都完成后才处理它们的结果。我对每个单独的网络请求都有一个完成处理程序,但它没有帮助,因为我不知道何时检索来自两个请求的数据。

我对 GCD 的经验有限,但现在 Swift 3 已经出来了,我想弄清楚如何运行多个任务并为它们提供一个完成处理程序。我的研究表明 GCD 或 NSOperationQueue 可能是我正在寻找的解决方案。任何人都可以帮助建议适合该工作的工具以及代码在 Swift 3 中的样子吗?

最佳答案

您应该使用调度组,在发出请求之前进入组,并在请求的完成处理程序中离开组。因此,让我们暂时假设您有一些执行异步请求的方法,但提供了一个完成处理程序参数,该参数是一个将在网络请求完成时调用的闭包:

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 组,在创建请求时进入组,并在异步请求的完成处理程序中离开组。

关于ios - 需要同时发出两个 HTTP 网络请求(完成处理程序一旦完成),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39535256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com