我正在尝试为数组中的每个元素协调多个完成处理程序。
代码本质上是这样的:
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