swift – 处理多个完成处理程序

swift – 处理多个完成处理程序,第1张

概述我正在尝试为数组中的每个元素协调几个完成处理程序. 代码基本上是这样的: var results = [String:Int]()func requestData(for identifiers: [String]){ identifiers.forEach { identifier in service.request(identifier, comp 我正在尝试为数组中的每个元素协调几个完成处理程序.

代码基本上是这样的:

var results = [String:Int]()func requestData(for IDentifIErs: [String]){    IDentifIErs.forEach    {   IDentifIEr in        service.request(IDentifIEr,completion: { (result) in            result[IDentifIEr] = result        })    }    // Execute after all the completion handlers finish    print(result)}

因此,Array中的每个元素都通过带有完成处理程序的服务发送,并且所有结果都存储在一个数组中.完成所有这些处理程序后,我希望执行一些代码.

我试图用dispatchQueue做到这一点

var results = [String:Int]()func requestData(for IDentifIErs: [String]){    let queue = dispatchQueue.init(label: "queue")    IDentifIErs.forEach    {   IDentifIEr in        service.request(IDentifIEr,completion: { (result) in            queue.sync            {                result[IDentifIEr] = result            }        })    }    // Execute after all the completion handlers finish    queue.sync    {        print(result)    }}

但是仍然首先执行打印调用,使用空字典

解决方法 如果我了解您正在尝试正确执行的 *** 作,则可能需要使用dispatchGroup

这是一个例子:

let group = dispatchGroup()var letters = ["a","b","c"]for letter in letters {    group.enter()    Server.doSomething(completion: { [weak self] (result) in        print("Letter is: \(letter)")        group.leave()    })}group.notify(queue: .main) {    print("- done")}

这将打印如下:

bca// ^ in some order- done
总结

以上是内存溢出为你收集整理的swift – 处理多个完成处理程序全部内容,希望文章能够帮你解决swift – 处理多个完成处理程序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1008076.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存