Me sale un error
La variable no es asignable (falta el especificador de tipo de bloque __)
en la linea aPerson = participant;
. ¿Cómo puedo asegurarme de que el bloque pueda acceder a la aPerson
variable y que la aPerson
variable pueda ser devuelta?
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;
__block
tiene el prefijo dos guiones bajos.__block
mi error desaparecido, pero el valor no se retiene fuera del bloque. Cualquier ayuda aquíSolo un recordatorio de un error que cometí yo también, el
La declaración 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 retiene su valor fuera del bloque.
fuente
Simplemente use el
__block
prefijo para declarar y asignar cualquier tipo de variable dentro de un bloque.Por ejemplo:
fuente
Para asignar una variable dentro del bloque que fuera del bloque siempre use el especificador __block antes de esa variable, su código debería ser así:
fuente
fuente
Pruebe
__weak
si recibe alguna advertencia sobre el ciclo de retención; de lo contrario, use__block
Ahora puedes referir
weakPerson
objetos dentro del bloque.fuente
sí, el bloque es la funcionalidad más utilizada, por lo tanto, para evitar el ciclo de retención, debemos evitar usar la variable fuerte, incluido self dentro del bloque, inspirar usar _weak o weakself.
fuente
Cuando vi el mismo error, traté de resolverlo como:
y está funcionando bien
Simplemente agregue " __block " antes de Variable.
fuente