我刚刚发现了完成块:
completion:^(BOOL finished){
}];
我需要做什么才能让我的方法接收一个完成块?
我刚刚发现了完成块:
completion:^(BOOL finished){
}];
我需要做什么才能让我的方法接收一个完成块?
1)定义您自己的完成块(completion block)
typedef void(^myCompletion)(BOOL);
2) 创建一个方法,将您的完成块作为参数传递
-(void) myMethod:(myCompletion) compblock{
//do stuff
compblock(YES);
}
3)这是如何使用它的:
[self myMethod:^(BOOL finished) { if(finished){ NSLog(@"success"); }}];
completion:(void (^)(BOOL success, NSString* videoPath))
- Stan James你定义块作为自定义类型:
typedef void (^ButtonCompletionBlock)(int buttonIndex);
然后将它作为参数传递给一个方法:
+ (SomeButtonView*)buttonViewWithTitle:(NSString *)title
cancelAction:(ButtonCompletionBlock)cancelBlock
completionAction:(ButtonCompletionBlock)completionBlock
在代码中调用它时,它就像任何其他块一样:
[SomeButtonView buttonViewWithTitle:@"Title"
cancelAction:^(int buttonIndex) {
NSLog(@"User cancelled");
}
completionAction:^(int buttonIndex) {
NSLog(@"User tapped index %i", buttonIndex);
}];
如果需要触发该块,则只需调用 completionBlock()
(其中completionBlock
是您本地复制的块的名称)。
块变量在语法上类似于C语言中的函数指针。
由于语法较为复杂,它们经常被typedef,但也可以正常声明。
typedef void (^MyFunc)(BOOL finished);
- (void)myMethod:(MyFunc)func
{
}
查看此答案以了解非typedef声明方法:
@interface
之前。 - Chris Nolet