我的目标是异步执行资源密集型操作,并确保在返回对象之前完成该操作。
结构如下:
func modifyGadgets() -> [Gadget] {
var gadgetsToModify = [Gadget]() //this is already populated elsewhere
DispatchQueue.global(qos: .userInitiated).async {
//Do something to the original gadgets
for gadget in gadgetsToModify {
modifyThisGadget(gadget)
}
DispatchQueue.main.async {
return gadgetsToModify //I get a warning here saying gadgetsToModify is unused
}
}
}
除了警告,我也没有得到任何
Gadget
项目回来。我应该如何组织它,以便我能够返回项目一旦完成?
谢谢。
最佳答案
您应该为此使用完成处理程序。
func modifyGadgets(_ callback: @escaping ([Gadget]) -> ()) {
var gadgetsToModify = [Gadget]()
DispatchQueue.global(qos: .userInitiated).async {
for gadget in gadgetsToModify {
modifyThisGadget(gadget)
}
DispatchQueue.main.async {
callback(gadgetsToModify)
}
}
}
你可以这样使用它:
modifyGadgets { gadgets in
print(gadgets)
}
关于ios - 确保在返回之前完成异步操作中的循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46244209/