Swift學習之構造與析構

2021-09-11 07:47:56 字數 2440 閱讀 7910

swift限制類的建構函式之間**呼叫的規則

構造過程安全檢查

建構函式繼承

析構函式簡介

建構函式

init()
示例:

class employee

}

struct rectangle

rectangle(width: 10.0, height: 10.0)

上面結構體重使用了預設建構函式,結構體中按照從上到下的順序吧屬性名作為引數標籤,依次提供引數,不用宣告建構函式,直接可以按照屬性引數標籤賦值初始化例項。注意這種預設建構函式,值使用於結構體,在類中不能使用。與oc不同的是swift的建構函式沒有返回值。

建構函式過載

class rectangle 

init(w witdh:double, h height: double)

init(length: double)

}let r1 = rectangle()

let r2 = rectangle(w: 100, h: 100)

let r3 = rectangle(length: 100)

當屬性名稱和構造函式引數名相同時,新增self.來區分是屬性函式引數。

建構函式**

結構體建構函式**

struct rectangle 

init(w witdh:double, h height: double)

init(length: double)

}let r1 = rectangle()

let r2 = rectangle(w: 100, h: 100)

let r3 = rectangle(length: 100)

結構體因為不存在繼承,所以建構函式**很簡單,就是在同一型別中通過self.init(...)語句來呼叫其他建構函式,self.init建構函式就稱為建構函式**

類造函式**

class rectangle 

init(w witdh:double, h height: double)

convenience init(length: double)

}let r1 = rectangle()

let r2 = rectangle(w: 100, h: 100)

let r3 = rectangle(length: 100)

類中建構函式橫向**必須前面加上convenience關鍵字

class person

init(name:string, age:int)

convenience init(name:string)

convenience init()

}class student: person

override convenience init(name: string, age: int)

func test()

}

swift限制類的建構函式之間**呼叫的規則

構造過程安全檢查

建構函式繼承

如果子類沒有定義任何指定建構函式,它將自動繼承父類的所有指定建構函式。(也就是說如果父類有多個指定建構函式,子類的指定建構函式只呼叫了乙個父類的指定建構函式super.init或者沒有重寫父類所有的指定建構函式,那麼子類不能繼承父類的建構函式,包括自定建構函式和便利建構函式,初始化時只能用自己的建構函式)

如果子類提供了所有父類指定建構函式的實現,無論是通過條件1繼承過來的,還是通過自己編寫實現的,它都將自動繼承父類的所有便利建構函式。(也就是如果子類不寫任何建構函式,則會繼承父類所有的建構函式,包括指定建構函式和便利建構函式,初始化時可以用自己的建構函式,也可以用父類的建構函式(包括父類繼承來的建構函式)。

析構函式

class rectangle 

init(w witdh:double, h height: double)

convenience init(length: double)

deinit

}print("初始化")

var r : rectangle? = rectangle(length: 100)

print("將要設定為nil")

r = nil

print("釋放")

Swift 構造與析構

在某些情況下系統會自動生成乙個構造器。使用構造器時注意事項。在 swift 中採用繼承式初始化方式。如果沒有在類中實現任何指定構造器,那麼將繼承父類中的所有指定構造器。父類 class transport 無引數指定構造器 init str string 子類 class car transport...

swift學習筆記之構造方法和析構方法

swift的構造器 initilizer 和析構器 deinitializer 構造器並不像函式和方法那樣在括號前有乙個可辨別的名字。所以在呼叫構造器時,主要通過構造器中的引數名和型別來確定需要呼叫的構造器。正因為引數如此重要,如果你在定義構造器時沒有提供引數的外部名字,swift 會為每個構造器的...

學習Swift 析構過程

析構器只適用於類型別,當乙個類的例項被釋放之前,析構器會被立即呼叫。析構器用關鍵字deinit來標示,類似於構造器要用init來標示。swift 會自動釋放不再需要的例項以釋放資源,swift 通過自動引用計數 arc 處理例項的記憶體管理。通常當你的例項被釋放時不需要手動地去清理。但是,當使用自己...