指定與便利構(gòu)造函數(shù):
1毅该、概念:
指定:指定構(gòu)造器將初始化類中提供的所有屬性博秫,
并調(diào)用合適的父類構(gòu)造器讓構(gòu)造過程沿著父類鏈繼續(xù)往上進(jìn)行。
每一個(gè)類都必須至少擁有一個(gè)指定構(gòu)造器
便利:便利構(gòu)造器是類中比較次要的眶掌、輔助型的構(gòu)造器
可以定義便利構(gòu)造器來調(diào)用同一個(gè)類中的指定構(gòu)造器挡育,
并為部分形參提供默認(rèn)值。
2朴爬、便利得用法:
需要在 init 關(guān)鍵字之前放置 convenience 關(guān)鍵字即寒,并使用空格將它們倆分開
3、必須遵守的規(guī)范
規(guī)則 1——指定構(gòu)造函數(shù)必須從它的直系父類調(diào)用指定構(gòu)造函數(shù)
規(guī)則 2——便捷構(gòu)造函數(shù)必須從相同的類里調(diào)用另一個(gè)構(gòu)造函數(shù)(可以是指定也可以是便捷)
規(guī)則 3——便捷構(gòu)造函數(shù)最終必須調(diào)用一個(gè)指定構(gòu)造函數(shù)
簡(jiǎn)單記憶的這些規(guī)則的方法如下:
指定構(gòu)造函數(shù)必須總是向上委托召噩。
便捷構(gòu)造函數(shù)必須總是橫向委托母赵。
class Car{
var speed:Double
//指定構(gòu)造函數(shù)(初始化所有屬性)
init(speed:Double) {
self.speed = speed
}
//便捷構(gòu)造函數(shù),必須調(diào)用指定構(gòu)造函數(shù)
convenience init() {
self.init(speed: 80.0)
}
}
let car = Car()
print(car.speed)
class Bus:Car{
var wheels:Int
var banner:String
//指定構(gòu)造器:提問初始化幾個(gè)屬性 自己的屬性自己初始化,父類的調(diào)用父類
init(wheels:Int,banner:String,speed:Double) {
self.wheels = wheels
self.banner = banner
//必須用父類指定構(gòu)造函數(shù)初始化
super.init(speed: speed)
}
//便捷構(gòu)造器-必須調(diào)用其他的構(gòu)造函數(shù)(指定)
convenience init(wheels:Int) {
self.init(wheels: wheels, banner: "", speed: 0.0)
print("test")
}
//便捷構(gòu)造器-必須調(diào)用其他的構(gòu)造函數(shù)(便捷)
convenience init() {
self.init(wheels: 8)
}
}
let bus = Bus()
print(bus.wheels)
print(bus.speed)