我正试图协调每个数组元素的多个完成处理程序。
代码本质上是这样的:
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)
}
因此,数组中的每个元素都通过具有完成处理程序的服务发送,并且所有结果都存储在数组中。一旦所有这些处理程序完成,我希望执行一些代码。
我尝试使用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)
}
}
但是打印调用仍然首先执行,使用一个空的Dictionary