410 votes

Affecter une variable à l'intérieur d'un Bloc à une variable à l'extérieur d'un Bloc

J'obtiens une erreur

La Variable n'est pas cessible (manquant __bloquer spécificateur de type)

sur la ligne, aPerson = participant;. Comment puis-je m'assurer que le Bloc peut accéder à l' aPerson variable et l' aPerson variable peut être retourné?

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;

828voto

Miraaj Points 4650

Vous avez besoin d'utiliser cette ligne de code pour résoudre votre problème:

__block Person *aPerson = nil;

Veuillez consulter ce tutoriel pour plus de détails : les Blocs et les Variables

43voto

Denis Balko Points 112

Juste un rappel d'une erreur que j'ai faite moi-même aussi, l'

 __block

la déclaration doit être faite lors de la première déclarer la variable, qui est, en DEHORS du bloc, pas à l'intérieur. Cela devrait résoudre les problèmes mentionnés dans les commentaires au sujet de la variable de ne pas conserver sa valeur à l'extérieur du bloc.

19voto

Umesh Sawant Points 21

Suffit d'utiliser "__bloc" préfixe de déclarer et d'assigner n'importe quel type de variable à l'intérieur d'un Bloc.

Par exemple. __bloquer Personne *toute personne âgée = nil;

__block NSString *name = nil;

11voto

Gaurav Points 58

Pour affecter une variable à l'intérieur d'un bloc à l'extérieur du bloc de toujours utiliser __bloquer spécificateur de avant que qui variable votre code devrait ressembler à ceci:-

__block Person *aPerson = nil;

-4voto

mikewen Points 33

Si vous utilisez un ARC, vous avez besoin d'utiliser __faibles:

__weak __block Person *aPerson = nil;

Sinon, la variable sera conservé.

Modifié: Comme jrturton souligné, ajoutant __faibles est fausse dans ce cas, parce que la fonction doit retourner toute personne âgée.

Utilisez uniquement __faibles si vous avez uniquement besoin de la variable à l'intérieur de la fonction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X