1. 程式人生 > >swift學習筆記(五)構造過程

swift學習筆記(五)構造過程

不能 學習筆記 結構體 rri -a 依據 類的屬性 去掉 trac

構造過程是為了使用某個類、結構體或枚舉類型的實例而進行的準備過程。在構造過程中,對每一個屬性進行了初始值預設和其它必要的準備和初始化工作。

與OC相比,swift的構造函數。不須要返回值。同一時候,在類和結構體的構造過程中,必須對全部的存儲類型屬性,包括繼承自父類的屬性。賦予合適的初始值。存儲類型值不能處於一個未知狀態。

在對屬性進行初始化過程中,有兩種方法,第一:使用構造方法,第二:在定義屬性時,直接賦予默認值。

當使用構造方法對屬性賦值時,不會觸發不論什麽的屬性觀測器。

當一個屬性總是使用同一個初始值時。能夠通過默認值的形式進行賦值。這樣能夠使構造器更加簡潔,同一時候也能夠自己主動導出屬性的類型。

在構造函數中,是能夠對常量屬性進行改動的。原則:僅僅要在構造函數結束前,常量值能夠確定,就能夠在構造函數中隨意時間點,對常量進行改動。

能夠在構造器中加入參數,參數的數量和類型能夠依據詳細須要而定。但在每一個制定構造器中,都必須對全部屬性進行賦值。

當一個類型有多個制定構造器時,主要通過參數名和類型來確定須要調用的構造器。

所以構造器的外部參數名顯得尤為重要。

跟普通函數一樣,系統會自己主動為每一個構造器的參數自己主動生成一個跟內部名字同樣的外部參數名稱。就相當於在構造函數前加入了一個“#”。

假設要去掉這樣的默認結構。能夠使用“_”來定義自己喜歡的外部參數名。

註意:在調用構造函數時,必需要通過外部參數名稱。否則在編譯器會報錯。

假設一個屬性能夠為空時。在定義時,能夠將其聲明為可選屬性類型

如:var string:String?


關於默認構造器:

當結構、枚舉、類型中的全部屬性都已經提供默認值並且自身沒有提供不論什麽構造函數時,系統會自己主動生成一個構造器。構造器中的全部屬性的值都為默認值。


關於指定構造函數和便利構造函數

為了保證類中的全部存儲屬性,包括繼承自父類的屬性都有初始值。

swift提供了兩種構造函數:指定構造函數和便利構造函數。

每一個類都必須擁有至少一個制定構造器,在init前加入convenience keyword。就可以聲明為便利構造函數。

指定構造函數和便利構造函數之間的調用關系。必須遵循下面三種規則:

1.指定構造函數必須調用其直接父類的構造器。即super.init()

2.便利構造函數必須調用同一類中定義的其它構造器。包括制定構造器和便利構造器。

3.便利構造器終於必須以調用一個制定構造器結束。

總結例如以下:制定構造器是向上代理。便利構造器是橫向代理。


關於繼承和重載;

在子類中。是不會自己主動繼承父類的構造器的,須要手動調用,即super。init

重載構造器函數時。不用寫overridekeyword

當要為子類引入隨意新屬性提供默認值時,須遵循下面兩條規則:

1.當子類中沒有不論什麽指定構造器,子類將自己主動繼承全部父類的制定構造器。

2.假設子類提供了全部父類制定構造器的實現。無論是通過規則1實現的。還是通過自己定義實現的,它將自己主動繼承全部父類的便利構造器。


swift學習筆記(五)構造過程