Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Objective-C call class method on Class variable

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

like image 377
Reilly Forshaw Avatar asked May 06 '26 23:05

Reilly Forshaw


2 Answers

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.
    }
}
like image 165
Darren Avatar answered May 08 '26 15:05

Darren


Try this:

if ( [clazz isKindOfClass:[MyBaseClass class]] ) {
  [clazz myClassMethod];
}
like image 24
jverdi Avatar answered May 08 '26 17:05

jverdi