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 aPersonvariable y que la aPersonvariable 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;

__blocktiene el prefijo dos guiones bajos.__blockmi 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
__blockprefijo 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
__weaksi recibe alguna advertencia sobre el ciclo de retención; de lo contrario, use__blockAhora puedes referir
weakPersonobjetos 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