我有以下协议和课程开始......
@protocol AnimalProtocol <NSObject> // this will be my global interface
@interface Animal : NSObject // and a super class
@interface Animal () <AnimalProtocol> // take note, I hid the protocol in .m file
现在我有一个带有addAnimal()方法的AnimalList类......
@interface AnimalList : NSObject
+ (void)addAnimal:(Animal <AnimalProtocol> *)animal;
现在说如果我是动物的子类,例如爬虫...
@interface Reptile : Animal
如果我尝试使用addAnimal()方法添加一个Reptile实例,那么
Reptile *lizard = [[Reptile alloc] init];
[AnimalList addAnimal:lizard];
它会产生警告..
&#34;不兼容的指针类型发送&#34; Reptile *&#34;参数类型&#34;动物*&#34;
这是真的,因为我将协议隐藏在超类Animal上。为了删除此警告,我需要在我的Reptile类中包含协议声明,或者在Animal类的.h上显示AnimalProtocol。
我的问题是,如何生成提到的GCC警告的程序化版本?我希望我的addAnimal()方法非常严格,如果Reptile类没有包含该协议,我想抛出异常。
注意:我试过了
[[lizard class] conformsToProtocol:@protocol(AnimalProtocol)]
但它没有用。它知道,爬行动物是动物的一个子类,它是无形的&#34;实现AnimalProtocol。但海湾合作委员会的警告能够发现它。所以我想知道如何以编程方式执行此操作。