Реализация метода, использующего блок для использования в качестве обратного вызова

Я хотел бы написать метод, подобный этому:

+(void)myMethodWithView:(UIView *)exampleView completion:(void (^)(BOOL finished))completion;

Я в основном разделил синтаксис, взятый из одного из методов класса Apple для UIView:

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;

И ожидал бы, что он будет использоваться так:

[myFoo myMethodWithView:self.view completion:^(BOOL finished){
                     NSLog(@"call back success");
                 }];

Мой вопрос в том, как я могу это реализовать? Если кто-то может указать мне на правильную документацию, что было бы здорово, и очень простой пример был бы очень оценен (или аналогичный ответ на Qaru - я не смог найти его). Я до сих пор недостаточно знаю о делегатах, чтобы определить, является ли это даже правильный подход!

Я привел пример того, что я ожидал, что он будет в файле реализации, но поскольку я не могу найти информацию, она угадывает работу.

+ (void)myMethod:(UIView *)exampleView completion:(void (^)(BOOL finished))completion {
    // do stuff

    if (completion) {
        // what sort of syntax goes here? If I've constructed this correctly!
    }

}

Ответ 1

Вы можете вызвать блок как регулярную функцию:

BOOL finished = ...;
if (completion) {
    completion(finished);
}

Таким образом, это означает, что реализация полной функции блока с использованием вашего примера будет выглядеть так:

+ (void)myMethod:(UIView *)exampleView completion:(void (^)(BOOL finished))completion {
    if (completion) {
        completion(finished);
    }
}

Ответ 2

Я очень рекомендую вам прочитать Blocks, чтобы понять, что происходит.

Ответ 3

Если вы специально ищете документ, чтобы создать собственный метод с использованием блоков, следующая ссылка - это та, которая объясняет почти все.:)

http://developer.apple.com/library/ios/documentation/cocoa/Conceptual/Blocks/Articles/bxUsing.html

В последнее время я встречаюсь с одним и тем же вопросом, посмотрите на это: Объявите параметр блочного метода без использования typedef