在给定枚举的情况下实例化一个类族

时间:2012-03-07 23:18:42

标签: objective-c cocoa-touch inheritance enumeration

我正在尝试使用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调用适当的构造函数?我觉得这样做是错误的做法。

谢谢!

2 个答案:

答案 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]