Я решил попробовать использовать блоки для управления потоком в Objective-C и столкнулся с некоторыми проблемами при вызове нескольких блоков в линию.
У меня есть OOBoolean, который является оболочкой для примитива BOOL и предоставляет следующие методы:
+ (id) booleanWithBool: (BOOL) boolPrimitive;
- (id) initWithBool: (BOOL) boolPrimitive;
- (void) ifTrueDo: (void (^) ()) trueBlock
ifFalseDo: (void (^) ()) falseBlock;
- (void) ifTrueDo: (void (^) ()) trueBlock;
- (void) ifFalseDo: (void (^) ()) falseBlock;
У меня нет проблем с использованием этого класса, вот так:
OOBoolean* condition = [OOBoolean booleanWithBool: (1 + 1 == 2)];
id trueBlock = ^(){
NSLog(@"True.");
};
id falseBlock = ^(){
NSLog(@"False.");
};
[condition ifTrueDo: trueBlock ifFalseDo: falseBlock];
И я получаю результат «Правда». Но я продолжаю получать синтаксические ошибки при попытке это вместо:
OOBoolean* condition = [OOBoolean booleanWithBool: (1 + 1 == 2)];
[condition ifTrueDo:(void (^)()) {
NSLog(@"True");
} ifFalseDo:(void (^)()) {
NSLog(@"False");
}];
Разве невозможно определить несколько блоков анонимно и передать их методу, который принимает несколько аргументов блока? Если так, то это своего рода разочарование.