我刚刚发现了完成块:
completion:^(BOOL finished){ }];
要让我自己的方法接受一个完成块,我需要做什么?
块变量在语法上与 C 语言中的函数指针相似。
因为语法很难看,所以它们通常是用类型定义的,但是它们也可以正常地声明。
typedef void (^MyFunc)(BOOL finished); - (void)myMethod:(MyFunc)func { }
参见非 typedef 的答案:
不使用 typedef 声明块方法参数
1)定义自己的完成块,
typedef void(^myCompletion)(BOOL);
2)创建一个以完成块为参数的方法,
-(void) myMethod:(myCompletion) compblock{ //do stuff compblock(YES); }
3)这就是你如何使用它,
[self myMethod:^(BOOL finished) { if(finished){ NSLog(@"success"); } }];
您将该块定义为一个自定义类型:
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是块的本地副本的名称)。
completionBlock()
completionBlock