调度组不适用于完成块

Rus*_*ick 3 concurrency grand-central-dispatch ios swift

试图从网络调用中获取返回回复对象。会话是一个使用明星尖叫 API 的类。我似乎无法让它发挥作用。它只打印出一组结果,这是第一个 id 的结果。我在这里缺少什么?

let myGroup = DispatchGroup()

for i in 0 ..< marketIds.count {
    myGroup.enter()
    self.session.retrieve(withMethod: MarketKeys.key, withParameters: [MarketKeys.id: marketIds[i]], completion: { (results, error) in
        print("results \n")
        print(results!)
        myGroup.leave()
        })
    }
myGroup.notify(queue:.main) {
print("Done")
}
Run Code Online (Sandbox Code Playgroud)

Scr*_*ble 5

文章为您提供了一个快速参考指南,简单的DispatchGroup使用。

一个例子:

let dispatchGroup = DispatchGroup()

dispatchGroup.enter()
longRunningFunction { dispatchGroup.leave() }

dispatchGroup.enter()
longRunningFunctionTwo { dispatchGroup.leave() }

dispatchGroup.notify(queue: .main) {
    print("Both functions complete ")
}
Run Code Online (Sandbox Code Playgroud)

当队列中的所有项目都处理完毕后,将调用通知函数,并允许您对此做出相应的反应。所以上面的例子将运行两个长时间运行的任务,然后输出“Both functions complete”