我应该为Objective C数组对象设置协议以避免编译器警告吗?

时间:2010-07-05 18:26:04

标签: objective-c iphone nsarray protocols

我有一个类,我们称之为ABC,带有NSArray * objects属性,NSArray中的对象可以是两个不同类别中的一个,X和Y.X和Y都有路径属性,但编译器不知道这一点。

因此,即使ABC总是在我的数组对象上找到路径属性,我的代码上也会收到编译器警告 - “找不到'路径'方法”。应用程序运行良好,但我对这些警告感到恼火。如何修复我的代码(使用协议?)以便编译器停止抱怨?

谢谢!

3 个答案:

答案 0 :(得分:2)

X和Y都来自包含“path”的同一个超类吗?如果“path”在概念上是相同的值,并且X和Y与该值相关,那么它应该是超类或协议。

此外,您可以使用NSKeyValueCoding协议通过- (id)valueForKey:(NSString *)key按字符串直接访问值。但是,使用此方法确实会失去任何类型的安全性。

答案 1 :(得分:2)

您需要导入一些声明path方法的标头。在编译代码时,编译器会查看此文件所知道的方法列表,并发现没有path方法。你只需要告诉它该方法存在,它的签名是什么,编译器将满足。没有必要的协议。

答案 2 :(得分:1)

valueForKey:@"path"