如果我希望在运行时检查类的类型,并且我想从方法中传入它,该怎么办?这会有用吗?
-(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来查看数组中是否有该类类型的对象。
答案 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;