声明像@class这样的协议

时间:2012-06-05 08:09:00

标签: objective-c

我有两个协议相互通信。它们在同一个文件中定义。

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

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

如何声明一个空协议Protocol2只是为了让编译器知道它是在以后声明的?

如果Protocol2是一个班级,我之前会写@class Protocol2;

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

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

协议的类似结构是什么?

2 个答案:

答案 0 :(得分:12)

使用@protocol进行协议转发声明:

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

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

答案 1 :(得分:1)

你的问题是你有@class关键字的前向声明协议。 它应该是@protocol。