如何在isKindOfClass中传递类的变量?

时间:2013-06-14 16:15:29

标签: objective-c

如果我希望在运行时检查类的类型,并且我想从方法中传入它,该怎么办?这会有用吗?

-(int)findObjectOfTypeClass:(id)classType container:(SPSprite*)sp
{

    for (int i=0; i<sp.numChildren; i++) {

        if([[sp childAtIndex:i] isKindOfClass:[classType class]])
        {
            return i;
        }
    }
    return -1;

}

如何调用该方法?像这样?

[self findObjectOfTypeClass:NSObject container: mySprite];

我想检查mutableArray(mySprite)以查看是否存在特定类型的任何对象。所以我不想传入一个实际的对象,我想传递类的类,所以NSObject,SPSprite等然后使用isKindOfClass来查看数组中是否有该类类型的对象。

2 个答案:

答案 0 :(得分:3)

通过按照您的方式定义方法,您可以像调用它一样调用它:

[self findObjectOfTypeClass:NSObject container: mySprite];

虽然传递NSObject本身有点奇怪,但将类定义作为id传递却有点滥用。您也可以将其称为(并且更诚实):

[self findObjectOfTypeClass:anInstance container: mySprite];

其中anInstance是您要测试的对象类。但现在方法名称具有误导性。你可能最好将其实现为:

-(int)findObjectOfTypeClass:(Class)classType container:(SPSprite*)sp
{

    for (int i=0; i<sp.numChildren; i++) {

        if([[sp childAtIndex:i] isKindOfClass:classType])
        {
            return i;
        }
    }
    return -1;

}

然后将其称为:

 [self findObjectOfTypeClass:[NSObject class] container: mySprite];

因为它对描述更准确,更清晰。

答案 1 :(得分:2)

您应该使用方法,这样:

[self findObjectOfTypeClass: [NSObject class] container: mySprite];

至于签名,这个是正确的:

-(int)findObjectOfTypeClass:(Class)classType container:(SPSprite*)sp;