Objective-C将基类对象转换为特定的类

时间:2012-06-01 07:56:34

标签: objective-c

我在目标C中非常新,我想知道我想做什么/如何做是可能的。 我有几节课

    @interface A: NSObject
{
    NSString*  Aa;
    NSUInteger Ab;
}

    @interface B: A
{
    NSString*  Ba;
    NSUInteger Bb;
}

    @interface C: A
{
    NSString*  Ca;
    NSUInteger Cb;
}

我想创建一个函数,我希望'A'类型的对象,并在实现中检查它们的类型后来是否为B或C.这就是我想要的:

-(void)doSomething:(A *param)
{
    //do some stuff
    if(param is an inscance of B)
    {
        //do stuff with B
    }
    else
    {
        //do stuff with C
    }
}

怎么做?

此致

佐利

2 个答案:

答案 0 :(得分:6)

检查NSObject的方法isKindOfClass:(Class)c 你会这样做:

-(void)doSomething:(A *)param
{
    //do some stuff
    if([param isKindOfClass:[B class]])
    {
        //do stuff with B (cast will be required to avoid warnings!)
        B *castedB = (B *)param;
        //...
    }
    else if ([param isKindOfClass:[C class]])
    {
        //do stuff with C
        C *castedC = (C *)param;
        //...
    }
}

希望这有帮助!

答案 1 :(得分:6)

您可能想要使用四种方法:

  • isKindOfClass:测试对象是否为类或子类的成员
  • isMemberOfClass:与上述相同,但更具体,不允许子类
  • respondsToSelector:测试一个对象是否响应给定的选择器,如[param respondsToSelector:@selector(method:)]。对鸭子打字很有用。
  • conformsToProtocol:测试对象是否实现协议。