Queremos regalarte la mejor información que encontramos en línea. Nosotros queremos que te resulte de ayuda y si puedes compartir alguna mejora siente la libertad de hacerlo..
Solución:
O también puede usar colas de operación. En rápido 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
O esto, o GCD, que Andy ilustró, funcionan bien.
Consulte la Guía de programación de concurrencia de Apple para conocer los méritos relativos de las colas de operación y las colas de envío (también conocido como Grand Central Dispatch, GCD). Si bien esa guía aún ilustra los ejemplos que usan Objective-C, la API y los conceptos son básicamente los mismos en Swift (solo use la sintaxis de Swift). La documentación para GCD y las colas de operaciones en Xcode describe las API de Objective-C y Swift.
Por cierto, notará que tanto en el ejemplo anterior como en la demostración GCD de Andy, usamos “cierres finales”. Por ejemplo, si nos fijamos en la definición addOperationWithBlock
que se define como una función con un parámetro que es un “cierre” (que es análogo a un bloque en Objective-C):
func addOperation(_ block: @escaping () -> Swift.Void)
Eso podría llevarlo a suponer que lo invocaría de la siguiente manera:
queue.addOperation(
// do something in the background
)
Pero cuando el último parámetro de una función es un cierre, la sintaxis de cierre final le permite sacar ese parámetro de cierre final de los paréntesis de la función y moverlo después de la función, lo que produce:
queue.addOperation()
// do something in the background
Y como no queda nada entre paréntesis, incluso puede ir un paso más allá y eliminar esos paréntesis vacíos:
queue.addOperation
// do something in the background
Esperemos que eso ilustre cómo interpretar el NSOperationQueue
/OperationQueue
y/o declaraciones de funciones GCD y utilícelas en su código.
Puede utilizar Grand Central Dispatch (GCD) para tales tareas.
Este es un ejemplo básico:
let backgroundQueue: dispatch_queue_t = dispatch_queue_create("com.a.identifier", DISPATCH_QUEUE_CONCURRENT)
// can be called as often as needed
dispatch_async(backgroundQueue)
// do calculations
// release queue when you are done with all the work
dispatch_release(backgroundQueue)
Si posees alguna duda y disposición de arreglar nuestro escrito puedes dejar un paráfrasis y con deseo lo leeremos.