Ошибка возникает из-за того, что параметр vc
указывает на экземпляр UIViewController
, и из-за того, как метод выглядит так, как вы хотите вместо этого вызвать инициализатор в классе контроллера.
Вы можете использовать Self
и пропустить первый аргумент, это сделает метод loadFromNib
действительно простым. Другая оптимизация, которую вы могли бы сделать, это объявить имя пера необязательным и присвоить ему значение по умолчанию nil
:
extension UIViewController {
static func loadFromNib(_ nibName: String? = nil) -> Self {
return self.init(nibName: nibName, bundle: nil)
}
}
Тогда вы сможете использовать этот метод следующим образом:
let vc = MyViewController.loadFromNib() // loads from MyViewController.nib
или
let vc = MyViewController.loadFromNib("Custom") // loads from Custom.nib