typestar

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

  1. void (^play)(NSString *, BOOL) tipa el parámetro de block.
  2. La función llama al block una vez por elemento con contexto.
  3. Quien llama provee el cuerpo en línea, en el sitio de llamada.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 3 de 3 en Blocks; paso 18 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →