2012-06-05 11 views
7

Mam dwa protokoły komunikujące się ze sobą. Są one zdefiniowane w tym samym pliku.Zgłaszanie protokołu takiego jak @klasa

@protocol Protocol1 <NSObject> 
-(void)setProtocolDelegate:(id<Protocol2>)delegate; 
@end 

@protocol Protocol2 <NSObject> 
-(void)protocol:(UIViewController<Protocol1>*)anObject chosenElementAtIndex:(NSInteger)aIndex; 
@end 

Jak deklarują pusty protokół Protocol2 tylko niech wiedzą, kompilator, że jest zadeklarowana później?

Jeśli Protocol2 był klasy, to powinienem napisać wcześniej @class Protocol2;.

@class Protocol2; 
@protocol Protocol1 <NSObject> 
-(void)setProtocolDelegate:(Protocol2*)delegate; 
@end 

@interface Protocol2 <NSObject> 
-(void)protocol:(UIViewController<Protocol1>*)anObject chosenElementAtIndex:(NSInteger)aIndex; 
@end 

Jaka jest podobna konstrukcja dla protokołów?

Odpowiedz

10

Zastosowanie @protocol dla protokołów naprzód deklaracja:

@protocol Protocol2; 
@protocol Protocol1 <NSObject> 
-(void)setProtocolDelegate:(id<Protocol2>)delegate; 
@end 

@protocol Protocol2 <NSObject> 
-(void)protocol:(UIViewController<Protocol1>*)anObject chosenElementAtIndex:(NSInteger)aIndex; 
@end 
1

Problem z twój, które zostały zadeklarowane protokół z przodu kluczowych @class. Powinien to być protokół.

+0

Wiem, że nie powinno to być "@ klasa". Użyłem drugiego fragmentu, aby pokazać analogię z klasami, aby pytanie było bardziej przejrzyste. W każdym razie, dzięki za pomoc –

Powiązane problemy