今天學(xué)了一些類和結(jié)構(gòu)的內(nèi)容友雳。
書看到第147頁稿湿,基本上一半了。
這周工作日只有4天押赊,蠻好饺藤。 筆記如下:
1 繼承。任何缺少關(guān)鍵字override的重寫,都會(huì)被編譯器診斷為錯(cuò)誤涕俗。
可以使用super來訪問超類版本的方法罗丰。
在實(shí)現(xiàn)方法時(shí),可以通過super.someMethod來調(diào)用超類的方法咽袜。
在重寫計(jì)算屬性時(shí)丸卷,可以通過super.someProperty來訪問超類的計(jì)算屬性。
在下標(biāo)腳本的重寫實(shí)現(xiàn)中询刹,可以通過super[someIndex]來訪問超類版本中的相同下標(biāo)谜嫉。
你可以將一個(gè)繼承來的只讀屬性重寫為一個(gè)讀寫屬性。但是你不可以將一個(gè)繼承來的讀寫屬性重寫為一個(gè)只讀屬性凹联。
class Vehicle {
var currentSpeed = 0.0
var description: String {
return "traveling at \(currentSpeed) miles per hour"
}
func makeNoise() {}
}
class Bicycle: Vehicle {
var hasBasket = false
}
class Tandem: Bicycle {
var currentNumberOfPassengers = 0
}
class Train: Vehicle {
override func makeNoise() {
print("choo choo")
}
}
class Car: Vehicle {
var gear = 1
override var description: String { //重寫計(jì)算屬性
return super.description + " in gear \(gear)"
}
}
class AutomaticCar: Car {
override var currentSpeed: Double { //重寫存儲(chǔ)屬性
didSet {
gear = Int(currentSpeed/10.0) + 1
}
}
}
可以通過把屬性沐兰,方法,或下標(biāo)標(biāo)記為final來防止它們被重寫蔽挠,只需在聲明關(guān)鍵字前加上final即可住闯。
final var,final fun澳淑。也可以在class前加final比原,將整個(gè)類標(biāo)記為不可繼承的。
2 構(gòu)造過程杠巡。當(dāng)你為存儲(chǔ)型屬性設(shè)置默認(rèn)值或者在構(gòu)造器中為其賦值時(shí)量窘,它們的值是被直接設(shè)置的,不會(huì)觸發(fā)任何屬性觀察器氢拥。
在調(diào)用構(gòu)造器時(shí)蚌铜,主要通過構(gòu)造器中的參數(shù)名和類型來確定需要調(diào)用的構(gòu)造器。如果你在定義構(gòu)造器的時(shí)候沒有定義外部名字嫩海,swift會(huì)為每個(gè)構(gòu)造器的參數(shù)自動(dòng)生成一個(gè)和內(nèi)部名字相同的外部名字冬殃。
例如:
class AutomaticCar: Car {
override var currentSpeed: Double { //重寫存儲(chǔ)屬性
didSet {
gear = Int(currentSpeed/10.0) + 1
}
}
var test1 = 2 {
willSet {
print("123")
}
}
//init1
override init() {}
//init2
init(_ test1: Int) {
self.test1 = test1
}
//init3
init(_ test1: Int, _ test2: Int) {}
//init4
init(test1: Int) {
self.test1 = test1
}
//init5
init(test2: Int) {
self.test1 = test2
}
}
//init1
var myCar1 = AutomaticCar()
print(myCar1.test1)
myCar1.test1 = 5
//init 2
var myCar2 = AutomaticCar(3)
//init 4
var myCar3 = AutomaticCar(test1: 4)
//init 5
var myCar4 = AutomaticCar(test2: 5)
//init 3
var myCar5 = AutomaticCar(2, 3)
構(gòu)造過程中常量屬性的修改。你可以在構(gòu)造中的任意時(shí)間點(diǎn)修改常量的值(但只有一次)叁怪,對(duì)某個(gè)實(shí)例來說审葬,它的常量屬性只能在定義它的類的構(gòu)造過程中修改,不能在子類中修改奕谭。
3 類的構(gòu)造耳璧。類的構(gòu)造器分兩種,指定構(gòu)造器和便利構(gòu)造器展箱,這其中有三條規(guī)則:指定構(gòu)造器必須調(diào)用其父類的指定構(gòu)造器;便利構(gòu)造器必須調(diào)用同一類中其他的構(gòu)造器蹬昌;便利構(gòu)造器最終必須以調(diào)用一個(gè)指定構(gòu)造器結(jié)束混驰。
指定構(gòu)造器必須總是向上代理。
便利構(gòu)造器必須總是橫向代理。
兩段式構(gòu)造過程:每個(gè)存儲(chǔ)類型通過引入它們的類的構(gòu)造器來設(shè)置初始值栖榨。當(dāng)每一個(gè)存儲(chǔ)型屬性被確定后昆汹,第二階段開始,它給每個(gè)類一次機(jī)會(huì)在新實(shí)例準(zhǔn)備使用之前進(jìn)一步定制它們的存儲(chǔ)型屬性婴栽。和java很類似满粗。
晚上回去換條路,順便買蛋卷愚争。
一定要有啊.......