看着斯坦福大學iOS 9課程here的演講幻燈片,他正在創建一個帶有兩個初始化程序的新的UIView
(其中一個如果UIView
是從storyboard創建的,另一個是如果它是在代碼中創建的)。下面的代碼是在那個特定的幻燈片的底部寫着:在其超類初始化後初始化UIView init?
func setup() {....} //This contains the initialization code for the newly created UIView
override init(frame: CGRect) { //Initializer if the UIView was created using code.
super.init(frame: frame)
setup()
}
required init(coder aDecoder: NSCoder) { //Initializer if UIView was created in storyboard
super.init(coder:aDecoder)
setup()
}
的規則是,你必須初始化所有自己的屬性之前,首先你可以抓住從超一個init。那麼爲什麼在這種情況下,他在他初始化自己setup()
之前稱他的超類init super.init
?這與以下規則不矛盾:
安全檢查1指定的初始化程序必須確保在其委託給超類初始化程序之前,它的類所引入的所有屬性都將被初始化。
如上所述,一旦所有存儲屬性的初始狀態已知,對象的存儲器僅被視爲完全初始化。爲了滿足這個規則,一個指定的初始化器必須確保所有的屬性在它傳遞鏈之前被初始化。