在某些情況下系統會自動生成乙個構造器。
使用構造器時注意事項。
在 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-let
或guard-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只是乙個普通的函式,必須顯示的呼叫 一旦由...