-(void) doJob :(Job*)job completion: (completionBlockWithArray) completion { // do some stuff here that fails or succeeds success:^(SomeType y) { /// completion(y, YES); } failure:^(SomeType y) { /// completion(y, NO); }];
Напоминаем, что завершение - это блок, который * передается * в эту функцию в качестве параметра.
Вот пример передачи блока завершения, который использовался выше в случае успеха / неудачи.
[self doJob:self.job completion:^(BOOL success, NSArray *array, NSString *errorMessage) { // do some things here } ];
Также напоминаем, что Apple настоятельно не рекомендует их использовать. Хорошие разработчики Objective-C не используют блоки успеха / неудачи в Objective-C, они тестируют, используя условие if-else. Избегайте такого рода синтаксического сахара.
Разработчик * действительно * не делает этого в Swift. Они используют блоки однократного завершения с обратными вызовами.
Между прочим, это typedef для сигнатуры * завершенияBlockWithArray *, использованной выше.
typedef void (^completionBlockWithArray) (BOOL success, NSArray *array, NSString *errorMessage);