2011-01-07 102 views
1

比方说,我有一个类ClassA它声明的协议在ClassA.h使用委托声明

@protocol SomeProtocol 

- (void)myMethod; 

@end 

现在,让我们说,我也有一类ClassB。我真的想用SomeProtocolClassB像这样:

#import ClassA.h 

@interface ClassB : NSObject 
{ 
    id <SomeProtocol> someObject; 
} 

但是编译器不断告诉我,它“无法找到协议声明‘SomeProtocol’

我缺少什么的任何想法?

回答

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

2

你也可以把在SomeProtocol.h协议(它自己的头文件),并从两个A类和B类

导入

如果你没有导入协议,你不会得到很好的编译时警告,告诉你什么时候你在错误地调用它...