将块传递给函数

时间:2012-05-17 18:35:25

标签: objective-c objective-c-blocks block

我有以下功能

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

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

2 个答案:

答案 0 :(得分: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:可能会出现并尝试登录某些服务。当尝试结束时,无论是成功还是失败,您的块(一段可执行代码)都将被运行,并且BOOL

将传递loginWithCompletionBlock:

顺便提一下,BOOL的名称可以是您喜欢的名称,但通常您使用的API会为其指定名称(例如success)以表明其含义。

答案 1 :(得分: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!!
    }
}];

希望这有帮助。