2012-05-17 88 views
0

我有以下功能传递到座功能

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

我该如何称呼呢?如何将BOOL作为块传递?我已经尝试了几种方法,而且我似乎无法理解这是如何工作的。

回答

2

您没有将“BOOL作为块”传递给您,您将传递一个块,稍后将传递一个BOOL

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

loginWithCompletionBlock:据推测将要熄灭并尝试登录到一些服务。当尝试已经结束,无论是成功或失败,你的块,这是一段可执行代码,将运行,并将于loginWithCompletionBlock:

顺便传递一个BOOL值时,BOOL的名称可以是任何你喜欢,虽然通常你使用的API会给它一个名字(例如success)来表示它的含义。

1

它的实现为:

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

    // Do the login thing. 

    completion(result); 
} 

调用它会像这样:

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

希望这有助于。