我从NSObject创建了2个对象子类
AObject,BObject
是否可以将这两个对象的变量传递给同一个函数?
,例如
-(void)myFunction:(AObject *)obj;
-(void)myFunction:(BObject *)obj;
我在xcode中测试过,不允许这样做。 有替代方法吗?
欢迎任何评论
由于 InterDev中
答案 0 :(得分:2)
有几种选择。这里有四个想到的,每个都有自己的优点和缺点:
签名歧视:
- (void)myFunctionWithA:(AObject *)obj;
- (void)myFunctionWithB:(BObject *)obj;
声明参数NSObject *
(或id
,如评论中所建议的那样)并查询函数内的类型。
BaseObject *
和AObject
继承的公共基类BObject
来约束它。将基类与蹦床技术结合起来:
- (void)myFunction:(BaseObject *)base {
[base myTrampoline:self];
}
BaseObject
声明抽象方法myTrampoline:
,AObject
和BObject
实现。
如果不了解您的问题,就不可能说哪个最好。
答案 1 :(得分:1)
有人建议您只需将参数键入id
,但如果您感觉很棒,则可以强制执行编译时检查,确保您的对象实际上能够执行您需要的操作:使用协议。 / p>
@protocol DoingSomething <NSObject>
// whatever methods you intend to call on the parameter of that one method
@end
//...
- (void)myFunction:(id<DoingSomething>)param {
// only send messages to param that are in <DoingSomething> and <NSObject>
}
//...