假设我有一个类ClassA
,它在ClassA.h
中声明了一个协议:
@protocol SomeProtocol
- (void)myMethod;
@end
现在,假设我还有一个班级ClassB
。我真的想在SomeProtocol
中使用ClassB
,就像这样:
#import ClassA.h
@interface ClassB : NSObject
{
id <SomeProtocol> someObject;
}
但编译器一直告诉我它“无法找到”SomeProtocol“的协议声明。
我缺少什么想法?
答案 0 :(得分:3)
将您的ClassB更改为:
@protocol SomeProtocol;
@interface ClassB : NSObject
{
id <SomeProtocol> someObject;
}
只是澄清一下,使用这样的@protocol指令只是告诉编译器SomeProtocol是一个稍后定义的协议。这只是对协议的前向引用,而无需导入定义它的接口。
可在此处找到更多信息(非常底部):http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProtocols.html
答案 1 :(得分:2)
您也可以将协议放在SomeProtocol.h(它自己的头文件)中,并从A类和B类导入它。
如果你没有导入协议,你就不会得到很好的编译时间警告,告诉你什么时候你在调用它时出错......