Swift語言中的init方法是用來創(chuàng)建對象的,有著比較嚴(yán)格的調(diào)用方式和實現(xiàn)方式律罢。
初始化方法的順序
Swift為了保證所有的屬性都被初始化诽嘉,對init方法里語句的順序有嚴(yán)格的要求。
- 子類要先初始化子類自有的屬性
- 調(diào)用父類的初始化方法
- 對父類中需要改變的屬性再賦值
示例代碼:
class Father{
var lastName:String
var firstName:String
init(){
lastName = "wang"
firstName = "Jianlin"
}
}
class Son:Father{
var 任性:Bool
override init(){
任性 = true //初始化子類自有的屬性
super.init()//調(diào)用super的init
firstName = "Sicong"http://更改需要變的成員變量
}
}
init的類別
- Designated
Swift中不加修飾的init都為designated,designated初始化方法中要保證所有非Optional的屬性都被初始化虫腋,子類的init方法也必須都調(diào)用父類的Designated init。 - Convenience
Convenience初始化方法必須調(diào)用同類中的Designated init完成初始化稀余,且不能被子類重載也不能在子類中用super的方式調(diào)用.只要子類重寫了父類convenience初始化方法需要的Designated方法悦冀,子類就可以直接調(diào)用父類的convenience init完成子類的初始化 - Required
對于希望子類實現(xiàn)的初始化方法,我們可以通過required限制睛琳,強(qiáng)制子類重寫盒蟆,這樣寫的作用保證了依賴某個Designated初始化方法的convenience一直可以使用。另外可以用required修飾convenience方法师骗,用來保證子類不直接使用父類的convenience历等。
failable init方法
如果一個init方法沒有返回一個對象而是返回了nil,說明初始化失敗了辟癌,這個類型的inti方法叫failable 初始化方法寒屯,寫作init?黍少。直接在init里return nil
就好了寡夹,普通的init方法是不能return nil的,編譯會報錯。