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