我需要在 Class 类型的变量上调用一个类方法,我知道它包含一个基类 MyBaseClass 的子类...

- (void)foo:(Class)clazz {
  // Now i want to call +myClassMethod on clazz
}

我不知道这是否真的可能。如果是,是否有更安全的方法来保证 clazz 实际上是 MyBaseClass 的子类?

提前致谢

最佳答案

您可以使用 -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.
    }
}

关于Objective-C 在 Class 变量上调用类方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8468980/

10-13 05:34