前面我們講了有關于腳本語法的基本認識以及使用, 現在讓我們來看看Swift的其他東西:
1.基類
所謂的基類, 就是OC中的父類, 不繼承任何類, 就叫做基類, 讓我們來看看例子:
class Vehicle {var currentSpeed = 0.0var description: String {return "traveling at \(currentSpeed) miles per hour"}func makeNoise() {}
}let someVehicle = Vehicle()
println("someVehicle: \(someVehicle.description)")
// 打印出來的結果: someVehicle: traveling at 0.0 miles per hour
PS: 這個類雖然是沒有什么意義, 但它的的確確是一個基類, 在Swift中, 如果你沒有在這個類名后面繼承與什么什么類, 那么就會自動的變成基類.
2.子類生成
所謂的子類, 其實和OC中的子類一樣的, 它是基于基類所新建的一個類, 這個類就叫做子類, 它擁有父類的所有特性, 同時它又可以有屬于自己的特性, 下面讓我們來看看例子:
class Bicycle: Vehicle {var hasBasket = false
}let bicycle = Bicycle()
bicycle.hasBasket = true
bicycle.currentSpeed = 15
println("bicycle: \(bicycle.description)")
// 打印出來的結果: bicycle: traveling at 15.0 miles per hour
PS: 上面的例子就是Vehicle類的子類, 它繼承與Vehicle的所有特性, 可以調用Vehicle類里面的變量, 方法,等等, 同時它又有自己的屬性.
3.重寫方法
在子類中, 雖然擁有父類的所有特性, 但在實際開發中, 有一些特殊的情況, 父類的方法不能滿足于子類的需求, 但我們又不想去更改父類的方法, 那么我們可以選在在子類里去重寫父類的方法, 比如:
class Car: Vehicle {var gear = 1override var description: String {return super.description + " in gear \(gear)"}
}let car = Car()
car.currentSpeed = 25.0
car.gear = 3
println("Car: \(car.description)")
// 打印出來的結果: Car: traveling at 25.0 miles per hour in gear 3
PS: 沒錯, 有些眼睛犀利的朋友就看到了, 在Car這個子類里, 有一個方法名和父類的方法名是一樣的, 但在這個方法名前面, 加了一個override這個關鍵字, 這個就是Swift中的重寫關鍵字.
4.重寫屬性
在Swift中, 既然能重寫父類的方法, 那當然也是可以重寫父類的屬性了, 讓我們來看看例子:
class SpeedLimitedCar: Car {override var gear: Int {get {return super.gear}set {super.gear = 2}}
}
let limitedCar = SpeedLimitedCar()
limitedCar.gear = 60println("SpeedLimitedCar: \(limitedCar.gear)")
// 打印出來的結果: SpeedLimitedCar: 2
PS: 這里需要注意一點的就是, 必須通過get和set這種特性的方式來重寫父類的屬性.
5.防止重寫
在上面的例子中, 如果我有某個類的屬性或者方法不想被重寫, 只要在基類定義的時候在前面加一個final關鍵字就可以防止被重寫, 下面讓我們來看看例子:
class Car: Vehicle {final var gear = 0final override var description: String {return super.description + " in gear \(gear)"}
}class SpeedLimitedCar: Car {override var description: String {return "重寫了"}override var gear: Int {get {return super.gear}set {super.gear = 2}}
}
// 報錯: Var overrides a 'final' var
好了, 這次我們就講到這里, 下次我們繼續~