the programming logo lenguaje language apple ios swift

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)