Albo można użyć kolejki operacji, też. W Swift 3:
let queue = OperationQueue()
queue.addOperation() {
// do something in the background
OperationQueue.main.addOperation() {
// when done, update your UI and/or model on the main queue
}
}
Albo to, albo GCD, który Andy illustrated, praca w porządku.
Zobacz Apple's Concurrency Programming Guide dla względnych zalet kolejki operacji i kolejek wysyłki (aka Grand Central Dispatch, GCD). Chociaż ten przewodnik wciąż ilustruje przykłady przy użyciu Objective-C, API i koncepcje są zasadniczo takie same w Swift (wystarczy użyć składni Swift). Dokumentacja GCD i kolejki operacji w Xcode opisuje zarówno Objective-C, jak i Swift API.
Nawiasem mówiąc, można zauważyć, że zarówno w powyższym przykładzie, jak również Andy'ego GCD demonstracji, użyliśmy „zamknięcia końcowe”. Na przykład, jeśli spojrzeć w definicji addOperationWithBlock
, która jest zdefiniowana jako funkcja jednego parametru, który jest „zamknięcie” (który jest analogiczny do bloku, w celu C)
func addOperation(_ block: @escaping() -> Swift.Void)
że może prowadzić zakładać, że można powołać się go w następujący sposób:
queue.addOperation({
// do something in the background
})
Ale kiedy ostatni parametr funkcji jest zamknięcie, tylna składnia zamknięcie pozwala przyjąć, że ostateczne parametry zamknięcia z nawiasów w funkcji, a przenieś go po funkcji, uzyskując:
queue.addOperation() {
// do something in the background
}
A ponieważ nie ma nic w nawiasach, można nawet pójść o krok dalej i usunąć te puste nawiasy:
queue.addOperation {
// do something in the background
}
Mam nadzieję, że pokazuje, jak interpretować funkcję NSOperationQueue
/OperationQueue
i/lub GCD deklaracje i wykorzystaj je w swoim kodzie.
spróbować zrobić to w Obj-C –
[CwlUtils] (https://github.com/mattgallagher/CwlUtils/) mogą być użyteczne . – Raphael