最近公司项目基本完结,在测试的时候发现一个问题:iOS8.0系统无法加载xib,运行的时候直接崩溃。po查找原因的时候,发现xib中的控件在ViewDidLoad方法中是个nil。这种情况说明xib在程序运行的时候,根本没有加载到程序中。
经过多方查资料。只需要这样子就好了
init() {
super.init(nibName: "XXX", bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
这是为什么呢?
与ObjC不同的是,Swift子类,默认情况下,不会继承父类的构造器(初始化函数)。这样可以防止错误的既传承并使用父类的构造器生成错误的实例(可能导致子类中的属性没有被赋值而正确初始化).与方法不同的一点是。在重载构造器的时候,你不需要添加override关键字。
虽然子类不会默认继承来自父类的构造器, 但是我们也可以通过别的方法来自动继承来自父类的构造器, 构造器的继承就遵循以下的规则:
1 如果子类没有定义任何的指定构造器, 那么会默认继承所有来自父类的指定构造器.
2 如果子类提供了所有父类指定构造器的实现, 不管是通过规则 1继承过来的, 还是通过自定义实现的, 它将自动继承所有父类的便利构造器.
如需了解更多,请查看 swift开发文档 初始化