11
在阅读Swift 3对GCD的进化之后,我试图创建调度组。问题是group.notify(queue:
不通知当我通过DispatchQueue.main
作为一个队列,虽然它的确适用于后台队列。调度组 - 无法通知主线程
而且我不知道我的语法是正确的,因为我想代码斯威夫特2转换为雨燕3.
typealias CallBack = (result: Bool) -> Void
func longCalculations (completion: CallBack) {
let backgroundQ = DispatchQueue.global(attributes: .qosBackground)
let group = DispatchGroup()
var fill:[Int] = []
for item in 0...200 {
group.enter()
if item > 50 {
fill.append(item)
}
group.leave()
}
//Below in the notify argument If I pass `backgroundQ`, it seems to work correctly but not when DispatchQueue.main is passed.
这个代码不工作
group.notify(queue: DispatchQueue.main, execute: {
completion(result: true)
})
}
This works correctly
group.notify(queue: backgroundQ, execute: {
completion(result: true)
})
}
_______________________________________________________
longCalculations() { print($0) }
那是什么_doesn't_“正常工作”的代码? – matt
@matt,当我尝试通过'group.notify(队列:DispatchQueue.main,执行:{'完成块返回任何内容(无法打印'Bool'值)“时,我已经编辑了清晰的问题,我传入一个并发队列'backgroundQ','Bool'值'true'返回并正确打印'longCalculations(){print($ 0)}'。 – jyet
您正在使用'enter'和'leave'错误。你可以阅读这篇文章:http://amro.co/gcd-using-dispatch-groups-for-fun-and-profit – matt