ios - programming - rápido: declaración de cierre como declaración de bloque
the swift programming language pdf (2)
Podemos declarar el bloque como abajo en Objective-C.
typedef void (^CompletionBlock) (NSString* completionReason);
Intento hacer esto rápido, da error.
func completionFunction(NSString* completionReason){ }
typealias CompletionBlock = completionFunction
Error: uso de ''completionFunction'' no declarado
Definición :
var completion: CompletionBlock = { }
¿Como hacer esto?
Actualizar:
De acuerdo con la respuesta de @ jtbandes, puedo crear un cierre con múltiples argumentos como
typealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()
La sintaxis para los tipos de funciones es (in) -> out
.
typealias CompletionBlock = (NSString?) -> Void
// or
typealias CompletionBlock = (result: NSData?, error: NSError?) -> Void
var completion: CompletionBlock = { reason in print(reason) }
var completion: CompletionBlock = { result, error in print(error) }
Tenga en cuenta que los paréntesis alrededor del tipo de entrada solo son necesarios a partir de Swift 3+.
Here hay un blog impresionante sobre el cierre rápido.
Aquí hay unos ejemplos:
Como una variable:
var closureName: (inputTypes) -> (outputType)
Como una variable opcional:
var closureName: ((inputTypes) -> (outputType))?
Como un alias de tipo:
typealias closureType = (inputTypes) -> (outputType)