14.構(gòu)造過程
- 構(gòu)造過程
1.構(gòu)造過程是使用類、結(jié)構(gòu)體或枚舉類型的實(shí)例之前的準(zhǔn)備過程;
2.類和結(jié)構(gòu)體在創(chuàng)建實(shí)例時(shí),必須為所有存儲(chǔ)型屬性設(shè)置合適的初始值扶供。存儲(chǔ)型屬性的值不能處于一個(gè)未知的狀態(tài)筛圆。你可以在構(gòu)造器中為存儲(chǔ)型屬性設(shè)置初始值裂明,也可以在定義屬性時(shí)分配默認(rèn)值
3.構(gòu)造器
構(gòu)造器在創(chuàng)建某個(gè)特定類型的新實(shí)例時(shí)被調(diào)用。它的最簡(jiǎn)形式類似于一個(gè)不帶任何形參的實(shí)例方法,以關(guān)鍵字 init 命名:
init(){
//此處執(zhí)行構(gòu)造過程
}
4.自定義構(gòu)造過程
//構(gòu)造過程中常量屬性的賦值
你可以在構(gòu)造過程中的任意時(shí)間點(diǎn)給常量屬性賦值闽晦,只要在構(gòu)造過程結(jié)束時(shí)它設(shè)置成確定的值扳碍。一旦常量屬性被賦值,它將永遠(yuǎn)不可更改仙蛉。
5.默認(rèn)構(gòu)造器:如果結(jié)構(gòu)體或類為所有屬性提供了默認(rèn)值笋敞,?沒有提供任何自定義的構(gòu)造器,那么 Swift 會(huì)給 這些結(jié)構(gòu)體或類提供一個(gè)默認(rèn)構(gòu)造器荠瘪。這個(gè)默認(rèn)構(gòu)造器將簡(jiǎn)單地創(chuàng)建一個(gè)所有屬性值都設(shè)置為它們默認(rèn)值的實(shí)例夯巷。
class ShoppingListItem {
var name: String?
var quantity = 1
var purchased = false
}
var item = ShoppingListItem()
6.可失敗構(gòu)造器
給構(gòu)造器傳?無效的形參,或缺少某種所需的外部資源哀墓,又或是不滿?某種必要的條件等趁餐,為了妥善處理理這種構(gòu)造過程中可能會(huì)失敗的情況。你可以在?個(gè)類篮绰,結(jié)構(gòu)體或是枚舉類型的定義中后雷,添加一個(gè)或多個(gè)可失敗構(gòu)造器。其語(yǔ)法為在 init 關(guān)鍵字后面添加問號(hào)( init? )吠各。
class Product {
let name: String
init?(name: String) {
if name.isEmpty { return nil }
self.name = name
}
}
15.構(gòu)析過程
-
析構(gòu)過程原理
析構(gòu)過程:析構(gòu)器只適?于類類型臀突,當(dāng)一個(gè)類的實(shí)例被釋放之前,析構(gòu)器會(huì)被立即調(diào)用贾漏。析構(gòu)器器?關(guān)鍵字 deinit 來標(biāo)示候学,類似于構(gòu)造器要? init 來標(biāo)示。析構(gòu)器是在實(shí)例釋放發(fā)生前被?動(dòng)調(diào)用的纵散。你不能主動(dòng)調(diào)用析構(gòu)器 //在類的定義中盒齿,每個(gè)類最多只能有一個(gè)析構(gòu)器,?且析構(gòu)器不帶任何參數(shù)和圓括號(hào)困食,如下所示: deinit { //執(zhí)行析構(gòu)過程 }