不同类型对象作为函数的参数

时间:2010-12-04 02:34:00

标签: iphone

我从NSObject创建了2个对象子类

AObject,BObject

是否可以将这两个对象的变量传递给同一个函数?

,例如

-(void)myFunction:(AObject *)obj;

-(void)myFunction:(BObject *)obj;

我在xcode中测试过,不允许这样做。 有替代方法吗?

欢迎任何评论

由于 InterDev中

2 个答案:

答案 0 :(得分:2)

有几种选择。这里有四个想到的,每个都有自己的优点和缺点:

  1. 签名歧视:

    - (void)myFunctionWithA:(AObject *)obj;
    - (void)myFunctionWithB:(BObject *)obj;
    
  2. 声明参数NSObject *(或id,如评论中所建议的那样)并查询函数内的类型。

  3. 如上所述,但通过声明BaseObject *AObject继承的公共基类BObject来约束它。
  4. 将基类与蹦床技术结合起来:

    - (void)myFunction:(BaseObject *)base {
        [base myTrampoline:self];
    }
    

    BaseObject声明抽象方法myTrampoline:AObjectBObject实现。

  5. 如果不了解您的问题,就不可能说哪个最好。

答案 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>
}
//...