Me sale 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 variable aPerson
y se pueda devolver la variable aPerson
?
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;
Necesita usar esta línea de código para resolver su problema:
__block Person *aPerson = nil;
Para obtener más información, consulte este tutorial: Bloques y variables
Solo un recordatorio de un error que también cometí, la
__block
la statement debe hacerse cuando se declara por primera vez la variable, es decir, FUERA del bloque, no dentro de él. Esto debería resolver los problemas mencionados en los comentarios sobre la variable que no conserva su valor fuera del bloque.
Simplemente use el prefijo __block
para declarar y asignar cualquier tipo de variable dentro de un bloque.
Por ejemplo:
__block Person *aPerson = nil; __block NSString *name = nil;
Para asignar una variable dentro de bloque que fuera de bloque siempre use __block especificador antes de esa variable su código debería ser así: –
__block Person *aPerson = nil;
__block Person *aPerson = nil;
yes block es la funcionalidad más utilizada, por lo que para evitar el ciclo de retención, debemos evitar el uso de la variable fuerte, incluido self dentro del bloque, a pesar de usar el _weak o el weasaw.
Prueba __weak
si recibes alguna advertencia con respecto al ciclo de retención o usa __block
Person *strongPerson = [Person new]; __weak Person *weakPerson = person;
Ahora puede referir el objeto weakPerson
dentro del bloque.