Asignar una variable dentro de un Bloque a una variable fuera de un Bloque
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 aPerson
variable y que la aPerson
variable 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;
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
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.
Simplemente use el __block
prefijo para declarar y asignar cualquier tipo de variable dentro de un bloque.
Por ejemplo:
__block Person *aPerson = nil;
__block NSString *name = nil;