Swift的init方法學習筆記

Swift語言中的init方法是用來創建對象的,有著比較嚴格的調用方式和實現方式。

初始化方法的順序

Swift為了保證所有的屬性都被初始化,對init方法里語句的順序有嚴格的要求。

  1. 子類要先初始化子類自有的屬性
  2. 調用父類的初始化方法
  3. 對父類中需要改變的屬性再賦值

示例代碼:

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的類別

  1. Designated
    Swift中不加修飾的init都為designated,designated初始化方法中要保證所有非Optional的屬性都被初始化,子類的init方法也必須都調用父類的Designated init。
  2. Convenience
    Convenience初始化方法必須調用同類中的Designated init完成初始化,且不能被子類重載也不能在子類中用super的方式調用.只要子類重寫了父類convenience初始化方法需要的Designated方法,子類就可以直接調用父類的convenience init完成子類的初始化
  3. Required
    對于希望子類實現的初始化方法,我們可以通過required限制,強制子類重寫,這樣寫的作用保證了依賴某個Designated初始化方法的convenience一直可以使用。另外可以用required修飾convenience方法,用來保證子類不直接使用父類的convenience。

failable init方法

如果一個init方法沒有返回一個對象而是返回了nil,說明初始化失敗了,這個類型的inti方法叫failable 初始化方法,寫作init?。直接在init里return nil就好了,普通的init方法是不能return nil的,編譯會報錯。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容