实现一个方法,将一个块用作回调

时间:2011-08-24 18:40:00

标签: objective-c ios callback objective-c-blocks

我想写一个类似的方法:

+(void)myMethodWithView:(UIView *)exampleView completion:(void (^)(BOOL finished))completion;

我基本上删除了从UIView的Apple类方法中获取的语法:

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;

并且期望它像这样使用:

[myFoo myMethodWithView:self.view completion:^(BOOL finished){
                     NSLog(@"call back success");
                 }];

我的问题是如何实现这一点?如果有人可以向我指出那些非常好的正确文档,并且非常感谢一个非常基本的例子(或者Stack Overflow上的类似答案 - 我找不到一个)。我仍然不太了解代表,以确定这是否是正确的方法!

我已经在实现文件中添加了一个粗略的例子,但是因为我无法找到信息,所以猜测是有用的。

+ (void)myMethod:(UIView *)exampleView completion:(void (^)(BOOL finished))completion {
    // do stuff

    if (completion) {
        // what sort of syntax goes here? If I've constructed this correctly!
    }

}

3 个答案:

答案 0 :(得分:84)

您可以像常规函数一样调用块:

BOOL finished = ...;
if (completion) {
    completion(finished);
}

这意味着使用您的示例实现完整的块函数将如下所示:

+ (void)myMethod:(UIView *)exampleView completion:(void (^)(BOOL finished))completion {
    if (completion) {
        completion(finished);
    }
}

答案 1 :(得分:5)

我强烈建议您阅读Blocks以了解正在发生的事情。

答案 2 :(得分:1)

如果您是专门寻找文档,使用块创建自定义方法,那么以下链接几乎解释了它的所有内容。 :)

http://developer.apple.com/library/ios/documentation/cocoa/Conceptual/Blocks/Articles/bxUsing.html

我最近碰巧回答了同样的问题,请看一下:Declare a block method parameter without using a typedef