Swift 4.0學習之:構造方法

構造方法


知識點:Swift中,如果定義屬性的時候沒有初始化,那麼必須在後面加上 “ ?”。但是隻要在構造方法中,對屬性進行了初始化,那麼就不用寫“ ?”了。

Swift中,有方法重載的概念,這種方式比較優雅,可惜OC裏沒有,因爲OC不允許方法名相同,在Swift裏,允許有同名的方法,只要形參或返回值不一樣即可。

注意點: 如果自定義了構造方法,並且沒有重寫父類的構造方法,那麼實例化的時候,只能用自定義的方法,父類的方法就用不了了。

再來一個注意點: Swift中,如果想在構造方法中,用KVC給屬性賦值,那麼必須在賦值之前先調用super.init() 。目的是爲了在KVC給屬性賦值之前,先給屬性分配儲存空間。有了這個前提,就引出了一個坑在下面的注意點

想不到還有一個注意點吧: 在聲明屬性的時候,如果是定義一個“對象屬性”,那麼後面可以直接跟上“ ?”。但是如果是定義一個“基本數據類型屬性”,那麼建議直接賦值爲0,不要跟“ ?”。因爲super.init() 方法在分配儲存空間的時候,發現屬性是一個對象,並且是一個可選類型,那麼會給這個屬性分配儲存空間,但是如果屬性是一個基本數據類型,並且是可選類型,那麼super.init()就不會給它分配存儲空間!!這個很關鍵,如果一不小心犯了這樣的錯誤,編譯是success的,但是一run就崩!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章