Самое простое объяснение этого вопроса - использовать следующие шаблоны:
1. Блок в качестве параметра метода
Template
- (void)aMethodWithBlock:(returnType (^)(parameters))blockName {
// your code
}
Пример
-(void) saveWithCompletionBlock: (void (^)(NSArray *elements, NSError *error))completionBlock{
// your code
}
Другие случаи использования:
2. Блок как объект недвижимости
Template
@property (nonatomic, copy) returnType (^blockName)(parameters);
* 1 033 *
* +1035 * Пример * +1036 ** * тысячу тридцать-восемь
@property (nonatomic,copy)void (^completionBlock)(NSArray *array, NSError *error);
3. Блок в качестве аргумента метода
Template
[anObject aMethodWithBlock: ^returnType (parameters) {
// your code
}];
* * Пример тысячи пятьдесят-три
[self saveWithCompletionBlock:^(NSArray *array, NSError *error) {
// your code
}];
4. Блок как локальная переменная
Template
returnType (^blockName)(parameters) = ^returnType(parameters) {
// your code
};
Пример
void (^completionBlock) (NSArray *array, NSError *error) = ^void(NSArray *array, NSError *error){
// your code
};
5. Блок как typedef
Template
typedef returnType (^typeName)(parameters);
typeName blockName = ^(parameters) {
// your code
}
* 1 087 *
Пример * * тысячу девяносто-два
typedef void(^completionBlock)(NSArray *array, NSError *error);
completionBlock didComplete = ^(NSArray *array, NSError *error){
// your code
};