2010-11-10 3 views
7

Я пытаюсь реализовать очень простой класс стратегии в Objective-C, который позволяет определять стратегии внутри строки, а не определять через наследование. В настоящее время мой код выглядит следующим образом:Можно ли определить блок как член класса?

@interface SSTaskStrategy : NSObject { 
    (NSArray *)(^strategy)(void); 
} 

@end 

Я думал, что это будет работать, но я получаю ошибку

Прогнозный спецификатор-квалификатор-лист перед '(' маркер

Любые идеи, как сделать эту работу?

ответ

17

Вы должны опустить скобки вокруг NSArray * в вашем определении Ивар:

@interface SSTaskStrategy : NSObject { 
    NSArray * (^strategy)(void); 
} 

@end 

Кроме того, я настоятельно рекомендую вам использовать typedef для большей ясности:

typedef NSArray * (^Strategy)(void); 

@interface SSTaskStrategy : NSObject { 
    Strategy block; 
} 

@end 

Это позволяет ссылаться на этот block с именем Strategy вместо того, чтобы использовать фанки-синтаксис каждый раз, когда вы хотите ссылаться на него.

+1

+1 для typedef. – BoltClock

+0

@BoltClock Спасибо! –

2
@interface SSTaskStrategy : NSObject { 
    NSArray* (^strategy)(void); 
} 

Вам не нужно ставить () вокруг типа возврата.

Смежные вопросы