2010-11-10 13 views
7

Próbuję zaimplementować bardzo prostą klasę strategii w Objective-C, która pozwala definiować strategie inline zamiast definiowania przez dziedziczenie. Obecnie mój kod wygląda następująco:Czy można zdefiniować blok jako członka klasy?

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

@end 

myślałem, że to będzie działać, ale jestem uzyskiwanie błąd

Oczekiwane specyfikatora-kwalifikatora listy przed '(' żeton

Jakieś pomysły, jak to zrobić?

Odpowiedz

17

Należy upuść nawiasy wokół NSArray * w definicji Ivar:

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

@end 

Ponadto, bardzo zalecane jest użycie typedef dla większej jasności:

typedef NSArray * (^Strategy)(void); 

@interface SSTaskStrategy : NSObject { 
    Strategy block; 
} 

@end 

Pozwala to na odwoływać się do tego blok o nazwie Strategy zamiast używać funkcji funky za każdym razem, gdy chcesz się do niej odwoływać.

+1

+1 dla typedef. – BoltClock

+0

@BoltClock Dzięki! –

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

Nie musisz wkładać () wokół typu zwrotu.

Powiązane problemy