I need to call a class method on a variable of type Class, which I know holds a subclass of a base class, MyBaseClass...
- (void)foo:(Class)clazz {
// Now i want to call +myClassMethod on clazz
}
I don't know if this is actually possible. If it is, is there a safer way to guarantee that clazz is actually a subclass of MyBaseClass?
Thanks in advance
You can use -respondsToSelector:, just like you would with any Objective-C object. You can also use +isSubclassOfClass: to test whether the class is a subclass of another class.
- (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.
}
}
Try this:
if ( [clazz isKindOfClass:[MyBaseClass class]] ) {
[clazz myClassMethod];
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With