我正在尝试使用Objective-C为iPhone应用程序做一些事情,而且我知道没有一个好的解决方案。
我有一个表示继承自X的类A,B和C的枚举:
typedef enum ClassEnum {
X,
A,
B,
C
} ClassEnum;
当我的应用程序较小时,我用它来识别不同类型的类,何时使用它们,应该做什么等等。现在它正在增长,我遇到了一些问题。
我有另一个类,它是这些类的组的容器。我想做的是有一个像这样的构造函数:
-(id) initWithClassType:(ClassEnum)type {
//create 10 instances of the given class and add them to an NSMutableArray
}
有没有办法在没有巨型switch
的情况下执行此操作,根据type
调用适当的构造函数?我觉得这样做是错误的做法。
谢谢!
答案 0 :(得分:0)
您可以传递一个字符串,表示要分配/ init的类的名称,而不是枚举。然后,您可以使用该字符串来获取所需的类对象,使用NSClassFromString函数。像这样:
-(id)initWithClassName:(NSString *)className{
Class *class = NSClassFromString(className);
MyMotherClass *object = [[class alloc]init];
...
}
答案 1 :(得分:0)
我最终做了以下事情:
Class class = nil;
switch(type) {
case A:
class = [A class];
break;
case B:
class = [B class];
break;
case C:
class = [C class];
break;
case X:
class = [X class];
break;
default:
class = [X class];
break;
}
然后拨打[[class alloc] init]
。