我创建2个对象的子类从NSObject的不同类型的对象作为一个函数的参数
AObject,BObject
是否有可能这些2个对象的变量传送到相同的功能?
如
-(void)myFunction:(AObject *)obj;
-(void)myFunction:(BObject *)obj;
我在xcode中测试,它是不允许的。 有没有更换方法?
欢迎任何评论
感谢 InterDev中
我创建2个对象的子类从NSObject的不同类型的对象作为一个函数的参数
AObject,BObject
是否有可能这些2个对象的变量传送到相同的功能?
如
-(void)myFunction:(AObject *)obj;
-(void)myFunction:(BObject *)obj;
我在xcode中测试,它是不允许的。 有没有更换方法?
欢迎任何评论
感谢 InterDev中
有几种选择。这里有四个浮现在脑海中,每个都有自己的优点和缺点:
判定由签名:
- (void)myFunctionWithA:(AObject *)obj;
- (void)myFunctionWithB:(BObject *)obj;
声明NSObject *
类型(或id
的参数,如意见建议)并查询函数内部的类型。
BaseObject *
来约束它,其中AObject
和BObject
继承。合并基类与蹦床技术:
- (void)myFunction:(BaseObject *)base {
[base myTrampoline:self];
}
BaseObject
声明了抽象方法myTrampoline:
,其AObject
和BObject
实现。
不知道更多关于您的问题,不可能说哪个最好。
有人建议只输入你的参数为id
,但如果你感觉很棒,你可以强制编译时检查你的对象是否真的能够做你需要的:使用协议。
@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>
}
//...
谢谢。我选择2. – arachide 2010-12-04 02:53:45