構(gòu)造器聲明會(huì)為程序內(nèi)的類,結(jié)構(gòu)體或枚舉引入構(gòu)造器。構(gòu)造器使用關(guān)鍵字Init來聲明,遵循兩條基本形式。
結(jié)構(gòu)體,枚舉,類可以有任意數(shù)量的構(gòu)造器,但是類的構(gòu)造器的規(guī)則和行為是不一樣的。不像結(jié)構(gòu)體和枚舉那樣,類 有兩種結(jié)構(gòu)體,designed initializers 和convenience initializers,參見構(gòu)造器一節(jié)。
如下的形式聲明了結(jié)構(gòu)體,枚舉和類的指定構(gòu)造器:
init(parameters
) {
statements
}
類的指定構(gòu)造器將類的所有屬性直接初始化。如果類有超類,它不能調(diào)用該類的其他構(gòu)造器,它只能調(diào)用超類的一個(gè) 指定構(gòu)造器。如果該類從它的超類處繼承了任何屬性,這些屬性在當(dāng)前類內(nèi)被賦值或修飾時(shí),必須帶哦用一個(gè)超類的 指定構(gòu)造器。
指定構(gòu)造器可以在類聲明的上下文中聲明,因此它不能用擴(kuò)展聲明的方法加入一個(gè)類中。
結(jié)構(gòu)體和枚舉的構(gòu)造器可以帶哦用其他的已聲明的構(gòu)造器,來委托其中一個(gè)火全部進(jìn)行初始化過程。
以關(guān)鍵字convenience來聲明一個(gè)類的便利構(gòu)造器:
convenience init(parameters
) {
statements
}
便利構(gòu)造器可以將初始化過程委托給另一個(gè)便利構(gòu)造器或類的一個(gè)指定構(gòu)造器。這意味著,類的初始化過程必須 以一個(gè)將所有類屬性完全初始化的指定構(gòu)造器的調(diào)用作為結(jié)束。便利構(gòu)造器不能調(diào)用超類的構(gòu)造器。
你可以使用requierd關(guān)鍵字,將便利構(gòu)造器和指定構(gòu)造器標(biāo)記為每個(gè)子類的構(gòu)造器都必須擁有的。因?yàn)橹付?gòu)造器 不被子類繼承,它們必須被立即執(zhí)行。當(dāng)子類直接執(zhí)行所有超類的指定構(gòu)造器(或使用便利構(gòu)造器重寫指定構(gòu)造器)時(shí), 必需的便利構(gòu)造器可以被隱式的執(zhí)行,亦可以被繼承。不像方法,下標(biāo)腳本那樣,你不需要為這些重寫的構(gòu)造器標(biāo)注 overrride關(guān)鍵字。
查看更多關(guān)于不同聲明方法的構(gòu)造器的例子,參閱構(gòu)造過程一節(jié)。
構(gòu)造器聲明語法
構(gòu)造器聲明 → 構(gòu)造器頭(Head) 泛型參數(shù)子句 可選 參數(shù)子句 構(gòu)造器主體
構(gòu)造器頭(Head) → 特性(Attributes)列表 可選 convenience 可選 init
構(gòu)造器主體 → 代碼塊