2012-05-17 5 views
0

je la fonction suivanteBloc à Passing Fonction

- (void)loginWithCompletionBlock:(void (^)(BOOL))completion

Comment puis-je appeler? Comment passer un BOOL en bloc? J'ai essayé plusieurs façons et je ne semble pas comprendre comment cela fonctionne.

Répondre

2

Vous ne passez pas "un BOOL en tant que bloc", vous passez un bloc qui sera passé plus tard un BOOL.

[thingy loginWithCompletionBlock:^(BOOL didSomethingInteresting){ 
    // Your code here, using didSomethingInteresting, such as: 
    if(didSomethingInteresting){ 
     // Do something even more interesting 
    } 
    else { 
     // Do something boring 
    } 
}]; 

loginWithCompletionBlock: va probablement aller et essayez de vous connecter à un service. Lorsque la tentative a pris fin, que ce soit dans le succès ou l'échec, votre bloc, qui est un morceau de code exécutable, sera exécuté, et sera transmis une valeur BOOL par loginWithCompletionBlock:

Soit dit en passant, le nom du BOOL peut être tout vous aimez, bien que généralement l'API que vous utilisez lui donne un nom (tel que success) pour indiquer sa signification.

1

Il est implémenté comme:

- (void)loginWithCompletionBlock:(void (^)(BOOL))completion 
{ 
    BOOL result = NO; 

    // Do the login thing. 

    completion(result); 
} 

Calling ce serait comme si:

[object loginWithCompletionBlock:^(BOOL success) { 
    if (success) { 
     // It worked 
    } else { 
     // Oh No!! 
    } 
}]; 

Hope this helps.