В моем приложении для iPhone есть абстрактный класс WorkingView. Это подкласс UIView. WorkingView, в свою очередь, будет иметь несколько конкретных подклассов. Двумя из них будут SimplifyView и MultiplyView.
Я пытаюсь написать метод, который создает новые экземпляры WorkingView. Этот метод должен иметь переданный режим и возвращать экземпляр соответствующего конкретного подкласса. Согласно ответу на этот вопрос , это то, что я имею до сих пор:
+ (id)newWorkingViewWithFrame:(CGRect)frame mode: (modeEnum) mode {
WorkingView *ret;
switch (mode) {
case simplifyMode:
ret = [[SimplifyView alloc]initWithFrame: frame];
break;
case multiplyMode:
ret = [[MultiplyView alloc]initWithFrame: frame];
break;
// additional cases here
default:
return nil;
}
// more initialization here
return ret;
}
Пока все хорошо. Но здесь есть проблема. В методе init SimplifyView мне нужно запустить объект через метод init UIView. Вызов [super initWithFrame: frame] возвращает меня только к WorkingView, а не к UIView. Я полагаю, я мог бы создать initWithFrame: метод в WorkingView, который, в свою очередь, вызывает initWithFrame: метод UIView - но это кажется хакерским.
Каков подходящий способ справиться с этим?