我有一个类方法(+),它接受类型为NSString
的参数。我想用该类方法做的是从另一个类方法返回信息,有许多不同的类方法返回不同的东西,我不想使用switch or if-statement
但是这样的东西:
return [self "ClassMethodName"];
我知道怎么用@selector()
来做,但似乎我不能在类方法中使用它。还有另一种方法可以做我想要的吗?
答案 0 :(得分:2)
如果你是通过类方法进行的,那么self
就是类对象,所以你可以这样做:
+ (id)myClassMethod {
return [self performSelector:NSSelectorFromString(@"ClassMethodName")];
}
如果您是通过实例方法进行的,那么您必须问问自己的课程:
- (id)myInstanceMethod {
return [self.class performSelector:NSSelectorFromString(@"ClassMethodName")];
}
当然,如果在编译时已知@selector(ClassMethodName)
,则可以使用ClassMethodName
,但我假设您在运行时之前实际上并不知道选择器名称。
请注意,Xcode不知道Class
个对象是NSObject
的实例,因此在这些情况下,它不会为您自动完成performSelector:
。
答案 1 :(得分:1)
实际上,因为类本身就是对象。
SEL selector = NSSelectorFromString(@"ClassMethodName");
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[self performSelector:selector];
#pragma clang diagnostic pop
编译器行需要使编译器静音警告“PerformSelector可能导致泄漏,因为它的选择器未知”(详见this question)。