gpt4 book ai didi

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

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

我正在尝试为数组中的每个元素协调多个完成处理程序。

代码本质上是这样的:

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)
}
}

但是 print 调用仍然首先执行,带有一个空的 Dictionary

最佳答案

如果我理解您要正确执行的操作,您可能想使用 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")
}

这将打印如下内容:

b
c
a
// ^ in some order
- done

关于swift - 处理多个完成处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47384180/

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