Создание одного из семейства классов с перечислением - PullRequest
0 голосов
/ 08 марта 2012

Я пытаюсь что-то сделать в 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?Я чувствую, что это должен быть неправильный способ сделать что-то подобное.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 марта 2012

Я закончил тем, что сделал следующее:

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 голосов
/ 08 марта 2012

Вы можете передать строку, представляющую тогда имя класса, который вы хотите выделить / init, вместо перечисления.Затем вы можете использовать эту строку для получения нужного вам объекта класса с помощью функции NSClassFromString.Как то так:

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