我刚刚发现了完成块:
completion:^(BOOL finished){
}];
我需要做什么才能让我自己的方法采用完成块?
答案 0 :(得分:225)
1)定义您自己的完成块,
typedef void(^myCompletion)(BOOL);
2)创建一个将完成块作为参数
的方法-(void) myMethod:(myCompletion) compblock{
//do stuff
compblock(YES);
}
3)这是您使用它的方式,
[self myMethod:^(BOOL finished) {
if(finished){
NSLog(@"success");
}
}];
答案 1 :(得分:24)
您可以将块定义为自定义类型:
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
是阻止本地副本的名称。)
答案 2 :(得分:2)
块变量的语法与C中的函数指针类似。
因为语法很难看,所以它们通常是typedefed,但它们也可以正常声明。
typedef void (^MyFunc)(BOOL finished);
- (void)myMethod:(MyFunc)func
{
}
请参阅非typedef的答案: