Swift之構造器(上)

2021-07-16 14:58:46 字數 1776 閱讀 7394

目錄:

swift之構造器(上)

swift之構造器(中)

swift之構造器(下)

swift賦予自定義型別更加豐富的功能,乙個顯著地方就是構造過程。swift可以為自定義型別設定構造器來初始化乙個例項。有關swift構造器的使用特點可以總結如下:

1. 構造器適用於類、結構體、列舉。是新的例項可用之前必須執行的乙個過程

2. 構造器具體的操作包括:必須保證所有儲存型屬性有合適初始值,執行其他必須的設定

3. 構造器無需返回值,區別於oc

4. 類的例項可以定義析構器,在例項釋放之前執行特定的清除工作

5. 儲存型屬性設定預設值和構造器中為其設定初始值,這種不會觸發任何屬性觀察器

一、預設構造器 - 最簡單的構造器

預設構造器原理:返回乙個所有屬性都使用其原有預設值的乙個例項

存在預設構造器的條件

1. 定義變數的時候,就可以保證所有屬性都有可用的值。

2. 沒有自定義的構造器

class  person

let ps = person() //使用了預設構造器

二、逐一成員構造器:類中不存在,適用於結構體

結構體不會像類一樣,對構造器給予限制,必須保證每個屬性都可用,因為除了預設構造器,結構體還有逐一成員構造器,可以對每個屬性進行設定

struct size

//let size = size() //此時不滿足預設構造器條件1,不能使用

let size1 = size(width: 10, height: 10) //使用逐一成員構造器

三、自定義構造器:輸入引數的形式構造例項,滿足多種情況的需要

常量只能被賦值一次,所以如果定義常量時有預設值,即使是建構函式也不能修改此值

對於類的例項,它的常量屬性只能在定義它的類的建構函式中修改,不能在子類中修改

class student

}

四、可選型屬性在構造器中的使用

使用可選型是因為在業務邏輯上允許此屬性為nil,包括兩種情況如下:

1.初始化的時候無法為其賦值,只能預設nil

2.在後續使用中需要將其賦值為nil

class teacher

}

五、構造器**

構造器通過呼叫其他構造器來完成例項的部分構造,被稱為構造器**,實現減少**重複,構造器**分為兩種:

值型別構造器**:適用於值型別(結構體/列舉),沒有繼承等複雜過程,較為簡單

類構造器**:因為有涉及到繼承,需要保證所有繼承屬性也能正確的初始化(也即是便利構造器,見下篇)

對於值型別,可以在自定義構造器中使用self.init來呼叫其他構造器

如果值型別定義了自定義構造器將不能使用預設構造器和逐一成員構造器。解決辦法:將自定義構造器寫在擴充套件裡,而不是值型別的原始定義中

struct newsize 

struct point

struct rect

//構造器2: 與逐一成員構造器一樣

init(origin:point, size:newsize)

//構造器3:呼叫了構造器2方法

//如果我們不去實現構造器2,將不能呼叫與其功能相似的逐一成員構造器

//所以我們可以參考擴充套件,將自定義方法寫在擴充套件中,就不必這樣麻煩了

init(center: point, size: newsize)

}

學習Swift 構造器(上)

構造過程是為了使用某個類 結構體或列舉型別的例項而進行的準備過程。這個過程包含了為例項中的每個儲存型屬性設定初始值和為其執行必要的準備和初始化任務。構造過程是通過定義構造器 initializers 來實現的,這些構造器可以看做是用來建立特定型別例項的特殊方法。與 objective c 中的構造器...

Swift之構造器的使用

當結構體或者類的所有屬性都有預設值,同時沒有自定義的構造器,這個時候,swift就會給這些類或者結構體提供乙個預設構造器,這個構造器會簡單地建立乙個所有屬性值都設定為預設值的例項。看官方的swift書是這麼說的。下面例子中建立了乙個類 shoppinglistitem 它封裝了購物清單中的某一物品的...

Swift 對比學習Swift構造器

首先建立乙個類 實現方法如下 而當我們利用建構函式生成例項時有以下幾種方法 在oc的例子中,構造器initwithname age 內部呼叫了另乙個構造器,避免了 重複,下面來圍觀swift中如何實現。在swift中,當你建立乙個類或者結構體的時候,它們的屬性一定有初值 否則編譯不過,例如let a...