У Swift 3 немає необхідності в DispatchQueue
обробці завершення, коли закінчується одне завдання. Крім того, ви можете досягти своєї мети різними способами
Один із способів такий:
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)")
Він зачекає, поки цикл закінчиться, але в цьому випадку ваша основна нитка блокується.
Ви також можете зробити те ж саме, що і це:
let myGroup = DispatchGroup()
myGroup.enter()
//// Do your task
myGroup.leave() //// When your task completes
myGroup.notify(queue: DispatchQueue.main) {
////// do your remaining work
}
Останнє: якщо ви хочете скористатися програмою завершення, коли ваше завдання завершиться за допомогою DispatchQueue, ви можете використовувати DispatchWorkItem
.
Ось приклад використання 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
}