2012-05-17 90 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!! 
    } 
}]; 

希望這有助於。