我必须修改一个相当广泛的类,以便我可以在继承链中使用它,所以作为第一步,我必须将所有函数名称迁移到接口,以便它们可用于继承。有没有比手动浏览我的.m
文件并逐个复制每个名称更好的方法呢?
答案 0 :(得分:1)
你可能应该重新设计你的类层次结构。
但是,我会问,子类化是否合适?您的子类是否符合子类的要求,特别是Liskov's Substitution Principle?
然而,ObjC并不要求提前知道多态性的方法,以及" private"的唯一概念。方法是暴露于头文件。
那就是说,如果我被迫做你提出的建议,我会用一些拟实现的方法创建一个协议。
@protocol MyAPI
- (void)foo;
- (void)bar:(id)bar withBlarg:(id)blarg;
@end
然后,您可以拥有任何您喜欢的类声明符合该协议。
@interface SomeClass : NSObject<MyAPI>
@end
然后,如果该类已经实现了所需的方法,则无需执行任何操作。否则,实现类中的方法,以使它们与协议API正确匹配。
现在,让我们假设您有一些方法希望接收符合MyAPI
协议的对象。
- (void)something:(id<MyAPI>)object {
[object foo];
[object bar:self.bar withBlarg:self.blarg];
}
这意味着任何对象只要符合协议就可以传递给something
,并且不需要任何形式的继承。
此外,ObjectiveC不支持多重继承,但您可以根据需要使用尽可能多的协议。