Пользовательский блок завершения для моего собственного метода [дубликат]
этот вопрос уже есть ответ здесь:
Я только что обнаружил блоки завершения:
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- имя вашей локальной копии блока).
