Objective c 实例化给定枚举的一系列类中的一个

Objective c 实例化给定枚举的一系列类中的一个,objective-c,cocoa-touch,inheritance,enumeration,Objective C,Cocoa Touch,Inheritance,Enumeration,我试图在Objective-C中为iPhone应用程序做一些事情,但据我所知,没有一个好的解决方案 我有一个枚举,表示从X继承的类A、B和C: typedef enum ClassEnum { X, A, B, C } ClassEnum; 当我的应用程序变小时,我用它来识别不同类型的类,何时使用它们,应该做什么,等等。现在它在增长,我遇到了一些问题 我有另一个类,它是这些类的组的容器。我想做的是有一个这样的构造函数: -(id) initWithClassTy

我试图在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
}
-(id)initWithClassName:(NSString *)className{
    Class *class = NSClassFromString(className);
    MyMotherClass *object = [[class alloc]init];
    ...
}
有没有一种方法可以做到这一点,而不需要一个巨大的
开关
,它可以根据
类型
调用相应的构造函数?我觉得这样做肯定是错误的


谢谢

可以传递一个字符串,该字符串表示要alloc/init的类的名称,而不是枚举。然后,您可以使用该字符串通过NSClassFromString函数获取所需的类对象。大概是这样的:

-(id) initWithClassType:(ClassEnum)type {
    //create 10 instances of the given class and add them to an NSMutableArray
}
-(id)initWithClassName:(NSString *)className{
    Class *class = NSClassFromString(className);
    MyMotherClass *object = [[class alloc]init];
    ...
}

我最后做了以下几件事:

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]