3

我对目标 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 instance of B)
    {
        //do stuff with B
    }
    else
    {
        //do stuff with C
    }
}

怎么做到呢?

真挚地,

佐利

4

2 回答 2

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;
        //...
    }
}

希望这有帮助!

于 2012-06-01T08:00:07.963 回答
6

您可能要使用四种方法:

  • isKindOfClass:测试对象是否是类或子类的成员
  • isMemberOfClass:同上,但更具体,不允许子类
  • respondsToSelector:测试对象是否响应给定的选择器,例如[param respondsToSelector:@selector(method:)]. 对鸭子打字很有用。
  • conformsToProtocol:测试对象是否实现了协议。
于 2012-06-01T08:05:54.937 回答