2012-03-07 45 views
0

我想在Objective-C中做一些iPhone应用程序,并没有一个我知道的很好的解决方案。实例化一个枚举类的家庭之一

我具有表示一个枚举类A,B和C,从X继承:

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

最后我做了以下内容:

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]通话。

0

您可以传递一个字符串来表示要分配/ init的类的名称,而不是枚举。然后,您可以使用该字符串来获取您需要的类对象,并使用NSClassFromString函数。事情是这样的:

-(id)initWithClassName:(NSString *)className{ 
    Class *class = NSClassFromString(className); 
    MyMotherClass *object = [[class alloc]init]; 
    ... 
}