objective-c - variabili - tupla swift




Assegna una variabile all'interno di un blocco a una variabile all'esterno di un blocco (5)

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


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;

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 oggetto weakPerson all'interno del blocco.


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.


__block Person *aPerson = nil;




objective-c-blocks