Po przeczytaniu ewolucji Swift 3 na GCD, próbuję utworzyć grupę wysyłkową. Problem polega na tym, że group.notify(queue:
nie powiadamia, gdy przekazuję DispatchQueue.main
jako kolejkę, chociaż działa ona w tle kolejki.Grupa wysyłkowa - nie można powiadomić głównego wątku
Również nie jestem pewien, że moje składnia jest poprawne, ponieważ staram się przekształcić kod Swift Swift 2 do 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.
Ten kod nie działa
group.notify(queue: DispatchQueue.main, execute: {
completion(result: true)
})
}
To działa poprawnie
group.notify(queue: backgroundQ, execute: {
completion(result: true)
})
}
_______________________________________________________
longCalculations() { print($0) }
Co znajduje się kod, który _doesn't_ „działa poprawnie”? – matt
@matt, Edytowałem pytanie dla jasności, kiedy próbuję powiadomić przez 'group.notify (kolejka: DispatchQueue.main, wykonaj: {' blok zakończenia zwraca nic (nie można wydrukować 'wartości Bool'), gdzie jak kiedy Mijam współbieżną kolejkę 'backgroundQ',' 'Bool' value' true' jest zwracana i drukowana poprawnie' longCalculations() {print ($ 0)} '. – jyet
Używasz' enter' i 'leave' niepoprawnie. aby przeczytać ten artykuł: http://amro.co/gcd-using-dispatch-groups-for-fun-and-profit – matt