最近公司項目基本完結(jié),在測試的時候發(fā)現(xiàn)一個問題:iOS8.0系統(tǒng)無法加載xib,運行的時候直接崩潰。po查找原因的時候哄尔,發(fā)現(xiàn)xib中的控件在ViewDidLoad方法中是個nil假消。這種情況說明xib在程序運行的時候,根本沒有加載到程序中岭接。
經(jīng)過多方查資料富拗。只需要這樣子就好了?
init() {
super.init(nibName: "XXX", bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
這是為什么呢??
與ObjC不同的是鸣戴,Swift子類啃沪,默認(rèn)情況下,不會繼承父類的構(gòu)造器(初始化函數(shù))窄锅。這樣可以防止錯誤的既傳承并使用父類的構(gòu)造器生成錯誤的實例(可能導(dǎo)致子類中的屬性沒有被賦值而正確初始化).與方法不同的一點是创千。在重載構(gòu)造器的時候,你不需要添加override關(guān)鍵字入偷。
雖然子類不會默認(rèn)繼承來自父類的構(gòu)造器, 但是我們也可以通過別的方法來自動繼承來自父類的構(gòu)造器, 構(gòu)造器的繼承就遵循以下的規(guī)則:
?1 如果子類沒有定義任何的指定構(gòu)造器, 那么會默認(rèn)繼承所有來自父類的指定構(gòu)造器.
?2 如果子類提供了所有父類指定構(gòu)造器的實現(xiàn), 不管是通過規(guī)則 1繼承過來的, 還是通過自定義實現(xiàn)的, 它將自動繼承所有父類的便利構(gòu)造器.
如需了解更多追驴,請查看 swift開發(fā)文檔 ?初始化?