实现一个块作为callback使用的方法

我想写一个类似这样的方法:

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

我已经基本上从苹果的UIView的类方法剥离的语法:

 + (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"); }]; 

我的问题是我怎样才能实现呢? 如果有人能指出我的正确的文档,那将是非常好的,一个非常基本的例子将不胜感激(或堆栈溢出类似的答案 – 我找不到一个)。 对代表们来说,我还不是很了解,以确定这是否是正确的做法!

我已经把我期望它在实现文件中的一个粗略的例子,但是因为我不能find信息这是猜测工作。

 + (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! } } 

你可以像普通函数一样调用一个块:

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

所以这意味着使用你的例子来实现一个完整的块函数应该是这样的:

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

我强烈build议你阅读块来理解发生的事情。

如果您正在专门查找文档,要使用块创build自定义方法,那么下面的链接就是解释几乎所有关于它的一切。 🙂

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

最近我碰到一个相同的问题,看看这个: 不使用typedef声明块方法参数