2010-11-10 15 views
7

Sto cercando di implementare una classe di strategia molto semplice in Objective-C che consente di definire le strategie in linea anziché essere definite tramite l'ereditarietà. Attualmente il mio codice è simile al seguente:È possibile definire un blocco come membro di una classe?

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

@end 

Ho pensato che questo avrebbe funzionato, ma sto ottenendo l'errore

Previsto specificatore-qualificatore-list prima '(' token

Qualche idea su come farlo funzionare?

risposta

17

Si dovrebbe cadere le parentesi intorno NSArray * nella definizione Ivar:

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

@end 

Inoltre, mi raccomando di utilizzare un typedef per maggiore chiarezza:

typedef NSArray * (^Strategy)(void); 

@interface SSTaskStrategy : NSObject { 
    Strategy block; 
} 

@end 

Questo consente di fare riferimento a questo blocca con il nome Strategy invece di dover usare la sintassi funky ogni volta che vuoi farvi riferimento.

+1

+1 per il typedef. – BoltClock

+0

@BoltClock Grazie! –

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

Non è necessario mettere il () attorno al tipo di ritorno.

Problemi correlati