假设我有一个名为的类和两个名为and的Parent
派生类。Child1
Child2
@interface Parent : NSObject {
NSString *fooVariable;
-(void)foo;
}
@end
@interface Child1 : Parent {
-(void)bar1;
}
@end
@interface Child2 : Parent {
-(void)bar2;
}
@end
现在想象我有一个方法被调用,在某些情况foo
下我想将它作为参数传递给. 根据我想调用方法或.Child1
Child2
bar1
bar2
如何在 Objective-c 中实现这一点?
我试过的:
我决定使用以下签名和实现:
-(void)fooWithObject:(Parent *)instance{
if ([instance isKindOfClass:[Child1 class]]){
[instance bar1];
}
else{
[instance bar2];
}
}
所以现在我可以这样做:
Parent *instance = [[Child1 alloc] init];
//This call is supposed to lead to an invocation of bar1 inside the foo method
[self fooWithObject:instance]
instance = [[Child2 alloc] init];
//This call is supposed to lead to an invocation of bar2 inside the foo method
[self fooWithObject:instance]
不幸的是,当我尝试编译我的代码时,编译器抱怨在我的父接口中没有声明方法 bar1(或 bar2)。
根据一些在线教程,您可以执行以下操作,因此理论上我的方法应该有效:
NSArray *anotherArray = [NSMutableArray array];
// This mutable-only method call is valid but
// produces a compile-time warning
[anotherArray addObject:@"Hello World"];