最近公司項目基本完結,在測試的時候發現一個問題: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開發文檔 ?初始化?