我需要在Class类型的变量上调用类方法,我知道它包含基类的子类MyBaseClass ...
- (void)foo:(Class)clazz {
// Now i want to call +myClassMethod on clazz
}
我不知道这是否真的可行。如果是,是否有更安全的方法来保证clazz实际上是MyBaseClass的子类?
提前致谢
答案 0 :(得分:6)
您可以使用-respondsToSelector:
,就像使用任何Objective-C对象一样。您还可以使用+isSubclassOfClass:
来测试该类是否是另一个类的子类。
- (void)foo:(Class)clazz
{
if ([clazz respondsToSelector:@selector(myClassMethod)])
{
[clazz myClassMethod];
}
else
{
// clazz does not implement that class method.
}
if ([clazz isSubclassOfClass:[MyBaseClass class]])
{
[clazz myClassMethod];
}
else
{
// clazz is not a subclass of MyBaseClass.
}
}
答案 1 :(得分:1)
试试这个:
if ( [clazz isKindOfClass:[MyBaseClass class]] ) {
[clazz myClassMethod];
}