Пользовательский блок завершения для моего собственного метода [дубликат]
этот вопрос уже есть ответ здесь:
Я только что обнаружил блоки завершения:
completion:^(BOOL finished){
}];
что мне нужно сделать, чтобы мой собственный метод взял блок завершения?
3 ответа:
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
- имя вашей локальной копии блока).