У меня был класс UIBaseClassViewController с удобными функциями в цели. Теперь я переключаюсь на swift и пытаюсь преобразовать его код в swift. Функция, вызывающая у меня проблему
+(UIBaseClassViewController*)getController
{
return [[[self class] alloc] initWithNibName:NSStringFromClass([self class]) bundle:[NSBundle mainBundle]];
}
iбыл в состоянии преобразовать его, но он не работает нормально
static func getController() -> Self
{
print("sam controller class = \(String(describing:self))")
print("SAM controller = \(self.init(nibName: String(describing:self), bundle:Bundle.main))")
return self.init(nibName: String(describing:self), bundle:Bundle.main)
}
Вывод:
sam controller class = UILoginViewController
SAM controller = <Swift_And_Node.UIBaseClassViewController: 0x7f8a4ee13830>
созданный объект имеет тип UIBaseClassViewController.it загружает перо нормально, но, поскольку объект имеет UIBaseClassViewController, происходит сбой приложенияпотому что он не смог найти функции в UIBaseClassViewController, которые находятся в UILoginViewController.
Как я могу заставить его создать объект дочернего класса вместо parent.UILoginViewController в этом случае
для лучшего понимания: добавление кода:
UIBaseClassViewController :
class UIBaseClassViewController: UIViewController {
static func getController() -> Self
{
print("sam controller class = \(String(describing:self))")
print("SAM controller = \(self.init(nibName: String(describing:self), bundle:Bundle.main))")
var object = self
return self.init(nibName: String(describing:self), bundle:Bundle.main)
}
}
UILoginViewController :
class UILoginViewController: UIBaseClassViewController {}
3-й контроллер, которому нужен UILoginViewController :
UILoginViewController.getController()