为什么在UINavigationController子类中需要重写init(rootViewController)和init(nibName,bundle)?

时间:2019-03-29 11:20:22

标签: swift

我创建了一个自定义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 {}

但是我遇到了运行时错误:

  

严重错误:对类'CustomNavigationController'使用未实现的初始化程序'init(nibName:bundle:)'

有人告诉我发生这种情况是因为这些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实例所发生的事情。

感谢您的帮助。

0 个答案:

没有答案