Asignar una variable dentro de un Bloque a una variable fuera de un Bloque

Resuelto tommi asked hace 12 años • 8 respuestas

Recibo un error

La variable no es asignable (falta el especificador de tipo __block)

en la línea aPerson = participant;. ¿Cómo puedo asegurarme de que el bloque pueda acceder a la aPersonvariable y que la aPersonvariable pueda devolverse?

Person *aPerson = nil;

[participants enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {   
    Person *participant = (Person*)obj;

    if ([participant.gender isEqualToString:@"M"]) {
        aPerson = participant;
        *stop = YES;
    }
}];

return aPerson;
tommi avatar Nov 01 '11 12:11 tommi
Aceptado

Debe utilizar esta línea de código para resolver su problema:

__block Person *aPerson = nil;

Para obtener más detalles, consulte este tutorial: Bloques y variables

Devarshi avatar Nov 01 '2011 05:11 Devarshi

Sólo un recordatorio de un error que yo también cometí, el

 __block

La declaración debe realizarse al declarar la variable por primera vez, es decir, FUERA del bloque, no dentro de él. Esto debería resolver los problemas mencionados en los comentarios acerca de que la variable no conserva su valor fuera del bloque.

Denis Balko avatar Mar 02 '2014 23:03 Denis Balko

Simplemente use el __blockprefijo para declarar y asignar cualquier tipo de variable dentro de un bloque.

Por ejemplo:

__block Person *aPerson = nil;

__block NSString *name = nil;
Umesh Sawant avatar Jan 10 '2014 07:01 Umesh Sawant