swift學習筆記 五 構造過程

2021-09-07 11:58:20 字數 1497 閱讀 1308

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

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

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

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

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

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

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

當乙個型別有多個制定構造器時,主要通過引數名和型別來確定須要呼叫的構造器。

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

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

假設要去掉這樣的預設結構。能夠使用「_」來定義自己喜歡的外部引數名。

注意:在呼叫建構函式時,必需要通過外部引數名稱。否則在編譯器會報錯。

假設乙個屬性能夠為空時。在定義時,能夠將其宣告為可選屬性型別

如:var string:string?

關於預設構造器:

當結構、列舉、型別中的全部屬性都已經提供預設值並且自身沒有提供不論什麼建構函式時,系統會自己主動生成乙個構造器。構造器中的全部屬性的值都為預設值。

關於指定建構函式和便利建構函式

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

swift提供了兩種建構函式:指定建構函式和便利建構函式。

每乙個類都必須擁有至少乙個制定構造器,在init前加入convenience keyword。就可以宣告為便利建構函式。

指定建構函式和便利建構函式之間的呼叫關係。必須遵循下面三種規則:

1.指定建構函式必須呼叫其直接父類的構造器。即super.init()

2.便利建構函式必須呼叫同一類中定義的其它構造器。包括制定構造器和便利構造器。

3.便利構造器終於必須以呼叫乙個制定構造器結束。

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

關於繼承和過載;

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

過載構造器函式時。不用寫overridekeyword

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

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

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

Swift學習之構造過程

類和結構體的儲存屬性必須在例項建立時,設定合適的初始值,可以提供預設值,也可以在構造器中提供初始值 1.構造引數 如果構造器的引數使用了外部引數名,必須使用,也可以用 代替,不適用外部引數名 struct celsius init twotemperature two double let onec...

swift 學習 15 構造過程 01

構造過程 是使用類,結構體 或 列舉型別的例項之前的準備過程,在新例項可用前必須執行這個過程,具體操作包括 設定例項中每個儲存型屬性的初始值 和 執行其他必須的設定 或 初始化工作 通過定義 構造器 來實現構造過程,這些構造器可以看做是用來建立特定型別新例項的 特殊方法,與 oc 中的構造器不同,s...

Swift學習筆記(五) 學習心得

1 初始化方法中引數會自動帶入外部名 不用寫在引數名稱前新增 2 初始化方法的過載不需要加override 和 func 3 在swift中,沒有this,這點需要注意 4 is和 as的區別 is 判斷是否屬於某型別 as把型別轉換為某型別 5 屬性的set 方法中 newvalue 表示賦值進來...