0

如果我希望在运行时设置要检查的类的类型,并且我想从方法中传递它,我该怎么做?这行得通吗?

-(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 来查看数组中是否存在该类类型的对象。

4

2 回答 2

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];

因为它的描述更准确,阅读更清晰。

于 2013-06-14T16:28:40.903 回答
2

您应该这样使用方法:

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

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

-(int)findObjectOfTypeClass:(Class)classType container:(SPSprite*)sp;
于 2013-06-14T16:26:44.247 回答