0

我有以下功能

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

我怎么称呼它?如何将 BOOL 作为块传递?我尝试了几种方法,但我似乎不明白这是如何工作的。

4

2 回答 2

2

您不是在传递“aBOOL作为一个块”,而是在传递一个稍后将传递给 a 的块BOOL

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

loginWithCompletionBlock:大概是要关闭并尝试登录某些服务。当尝试结束时,无论成功或失败,您的块(一段可执行代码)都将运行,并将BOOL通过loginWithCompletionBlock:

顺便说一句,BOOL您可以随意命名,尽管通常您使用的 API 会给它一个名称(例如success)来表示其含义。

于 2012-05-17T18:38:52.353 回答
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!!
    }
}];

希望这可以帮助。

于 2012-05-17T18:41:38.223 回答