Nachdem ich Swift 3 Evolution auf GCD gelesen habe, versuche ich Versandgruppe zu erstellen. Das Problem ist die group.notify(queue:
Benachrichtigen Sie nicht, wenn ich DispatchQueue.main
als eine Warteschlange übergeben, obwohl es für die Hintergrundwarteschlange funktioniert.Versandgruppe - kann nicht zum Hauptthread
Auch ich bin nicht sicher, ob meine Syntax alle richtig ist, wie ich Code von Swift 2 bis Swift 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.
Dieser Code zu konvertieren Ich versuche nicht funktionieren
group.notify(queue: DispatchQueue.main, execute: {
completion(result: true)
})
}
Dies funktioniert einwandfrei
group.notify(queue: backgroundQ, execute: {
completion(result: true)
})
}
_______________________________________________________
longCalculations() { print($0) }
Was der Code ist, der „richtig funktionieren“ _doesn't_? – matt
@matt, Ich habe Frage für Klarheit geklärt, wenn ich versuche, über 'group.notify zu benachrichtigen (Warteschlange: DispatchQueue.main, ausführen: {' der Completion-Block gibt nichts zurück (unfähig, 'Bool'-Wert zu drucken), wo als Ich übergebe eine gleichzeitige Warteschlange 'backgroundQ', der' Bool' Wert 'true' wird zurückgegeben und korrekt ausgedruckt' longCalculations() {print ($ 0)} '. – jyet
Du verwendest' enter' und 'leave' falsch Sie sollten diesen Artikel lesen: http://amro.co/gcd-using-dispatch-groups-for-fun-and-profit – matt