Dans Swift 3, il n'y a pas besoin de gestionnaire de complétion lorsque DispatchQueue
termine une tâche. En outre, vous pouvez atteindre votre objectif de différentes manières
Voici une façon de le faire :
var a: Int?
let queue = DispatchQueue(label: "com.app.queue")
queue.sync {
for i in 0..<10 {
print("" , i)
a = i
}
}
print("After Queue \(a)")
Il attendra que la boucle se termine, mais dans ce cas, votre fil principal se bloquera.
Vous pouvez aussi faire la même chose comme ceci :
let myGroup = DispatchGroup()
myGroup.enter()
//// Do your task
myGroup.leave() //// When your task completes
myGroup.notify(queue: DispatchQueue.main) {
////// do your remaining work
}
Une dernière chose : si vous voulez utiliser completionHandler lorsque votre tâche se termine en utilisant DispatchQueue, vous pouvez utiliser DispatchWorkItem
.
Voici un exemple d'utilisation DispatchWorkItem
:
let workItem = DispatchWorkItem {
// Do something
}
let queue = DispatchQueue.global()
queue.async {
workItem.perform()
}
workItem.notify(queue: DispatchQueue.main) {
// Here you can notify you Main thread
}