Я создал пользовательский UINavigationController
:
class NavigationController: UINavigationController {
override public init(rootViewController: UIViewController) {
super.init(rootViewController: rootViewController)
}
public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
}
Затем я создаю подкласс:
final class CustomNavigationController: NavigationController {}
Но я получаю ошибку во время выполнения:
фатальная ошибка: использование неосуществленного инициализатора 'init (nibName: bundle :)' для класса 'CustomNavigationController'
Мне сказали, что это происходит потому, что эти init()
действуют как удобные инициализаторы, и я должен реализовать их в подклассе, чтобы избежать сбоя.
Я не понимаю этого утверждения, так как попробовал что-то простое:
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
convenience init(tenYearsOldNamed name: String) {
self.init(name: name, age: 10)
}
}
class SubPerson: Person {}
let ben = SubPerson(tenYearsOldNamed: "Ben")
Это прекрасно работает, независимо от того, переопределяю я init(name, age)
в SubPerson
или нет.
Так что я не совсем понимаю, что происходит с этими UINavigationController
единицами.
Спасибо за вашу помощь.