Sto ricevendo un errore
La variabile non è assegnabile (identificatore di tipo __block mancante)
sulla riga aPerson = participant;
. Come posso assicurarmi che il blocco possa accedere alla variabile aPerson
e che la variabile aPerson
possa essere restituita?
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;
È necessario utilizzare questa riga di codice per risolvere il problema:
__block Person *aPerson = nil;
Per maggiori dettagli, fai riferimento a questo tutorial: Blocchi e variabili
Solo un ricordo di un errore che ho fatto anch’io, il
__block
la dichiarazione deve essere fatta quando si dichiara la variabile, cioè FUORI dal blocco, non al suo interno. Questo dovrebbe risolvere i problemi menzionati nei commenti sulla variabile che non mantiene il suo valore al di fuori del blocco.
Basta usare il prefisso __block
per dichiarare e assegnare qualsiasi tipo di variabile all’interno di un blocco.
Per esempio:
__block Person *aPerson = nil; __block NSString *name = nil;
Per assegnare una variabile all’interno del blocco che all’esterno del blocco usi sempre __block specificatore prima di tale variabile il tuo codice dovrebbe essere così:
__block Person *aPerson = nil;
__block Person *aPerson = nil;
yes block sono le funzionalità più utilizzate, quindi per evitare il ciclo di conservazione dovremmo evitare di usare la variabile strong, incluso self all’interno del blocco, inspite use the _weak o weakself.
Prova __weak
se ricevi qualche avvertimento riguardante il ciclo di conservazione altrimenti usa __block
Person *strongPerson = [Person new]; __weak Person *weakPerson = person;
Ora puoi riferire weakPerson
object weakPerson
all’interno del blocco.