我的目标是异步执行资源密集型操作,并确保在返回对象之前完成该操作。
结构如下:

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/

10-10 04:45