Swift 構造與析構

2021-08-31 03:08:51 字數 1626 閱讀 8987

在某些情況下系統會自動生成乙個構造器。

使用構造器時注意事項。

在 swift 中採用繼承式初始化方式。

如果沒有在類中實現任何指定構造器,那麼將繼承父類中的所有指定構造器。

// 父類

class transport // 無引數指定構造器

init(str: string)

}

// 子類

class car: transport

// 使用

let mycar = car() // 使用了父類中的無引數構造器

let mynewcar = car(str: "ludi") // 使用父類中有乙個引數的構造器

一旦在子類中建立了自己的指定構造器,將不能再使用父類中的構造器,並且子類中的指定構造器宣告中需要呼叫父類中的某個指定構造器。

// 父類

class transport // 無引數指定構造器

init(str: string)

}

// 子類

class car: transport

}

// 使用

let mycar = car(scope: "ludi", wheel: "miqilin") // 此時不能使用父類中無參或者有乙個引數的構造器

如果子類中重寫了父類中所有的指定構造器,那麼將繼承父類中所有的便利構造器。

// 父類

class transport // 無引數指定構造器

init(str: string)

convenience init(scope: string)

}

// 子類

class car: transport

override init(str: string)

}

// 使用

let mycar = car(scope: "ludi") // 呼叫父類的便利構在器

通常面對這種可失敗構造器建議使用if-letguard-let-else結構,如果初始化成功就執行操作,否則就做其它操作。

在把物件設定為nil時,系統會自動呼叫析構器。

deinit

由於 swift 中引入了自動引用計數(arc),因此不需要讀者手動管理記憶體,但在使用一些自己的資源的時候,需要使用析構器。

值型別沒有析構是因為值型別不會出現 「共享」,每個值型別只有乙個擁有者。

Swift學習之構造與析構

swift限制類的建構函式之間 呼叫的規則 構造過程安全檢查 建構函式繼承 析構函式簡介 建構函式 init 示例 class employee struct rectangle rectangle width 10.0,height 10.0 上面結構體重使用了預設建構函式,結構體中按照從上到下的...

swift構造器和析構器

1.構造器重載 函式有相同的名字 引數列表不同或返回值型別不同,或外部引數名不同 橫向 類似於值型別構造器 發生在同一類內部,這種構造器稱為便利構造器 在構造器前面加上了convenience關鍵字 向上 發生在繼承情況下,在子類構造過程中要先呼叫父類構造器,初始化父類的儲存屬性,這種構造器稱為指定...

九 構造與析構

c 中的建構函式 如何給物件進行初始化?一般而言所有的物件都需要乙個確定的初始狀態 解決方案 為每個類都提供乙個public的initialize函式 物件建立後立即呼叫initialize函式進行初始化 插入9 1.cpp 上述解決方案initialize只是乙個普通的函式,必須顯示的呼叫 一旦由...