Blocks como parámetros en Objective-C
Pasa comportamiento a una función, con firma de C incluida.
#import <Foundation/Foundation.h>
// A function that takes a block parameter, spelled in C style.
static void withEachSide(NSArray<NSString *> *sides,
void (^play)(NSString *side, BOOL last)) {
NSUInteger n = [sides count];
for (NSUInteger i = 0; i < n; i++) {
play(sides[i], i == n - 1);
}
}
int main(void) {
@autoreleasepool {
withEachSide(@[ @"Side A", @"Side B" ],
^(NSString *side, BOOL last) {
NSLog(@"Now playing %@%@", side, last ? @" (flip me)" : @"");
});
}
return 0;
}
Cómo funciona
void (^play)(NSString *, BOOL)tipa el parámetro de block.- La función llama al block una vez por elemento con contexto.
- Quien llama provee el cuerpo en línea, en el sitio de llamada.
Palabras clave y builtins usados aquí
BOOLNSArrayNSStringforintreturnstaticvoid
El intento, en números
- Líneas
- 20
- Caracteres a escribir
- 481
- Tokens
- 129
- Ritmo de tres estrellas
- 60 tpm
Al ritmo de tres estrellas de 60 tokens por minuto, este intento toma unos 129 segundos.
Paso 3 de 3 en Blocks; paso 18 de 27 en Fundamentos del lenguaje.