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