检查"指针不兼容"以编程方式警告

时间:2014-07-06 20:49:25

标签: objective-c gcc

我有以下协议和课程开始......

@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。但海湾合作委员会的警告能够发现它。所以我想知道如何以编程方式执行此操作。

0 个答案:

没有答案