3 回答

TA貢獻1796條經驗 獲得超10個贊
Swift不允許您更改任何變量或屬性的類類型。相反,您可以在子類中創建一個額外的變量來處理新的類類型:
class Chassis {}
class RacingChassis : Chassis {}
class Car {
var chassis = Chassis()
}
class RaceCar: Car {
var racingChassis = RacingChassis()
override var chassis: Chassis {
get {
return racingChassis
}
set {
if newValue is RacingChassis {
racingChassis = newValue as RacingChassis
} else {
println("incorrect chassis type for racecar")
}
}
}
}
似乎無法使用let語法聲明屬性,而不能在其子類中用var覆蓋它,反之亦然,這可能是因為超類實現可能不希望該屬性一旦初始化就更改。因此,在這種情況下,還需要在超類中使用'var'聲明屬性,以匹配子類(如上面的代碼段所示)。如果無法更改超類中的源代碼,則可能最好在每次需要更改底盤時銷毀當前的RaceCar并創建一個新的RaceCar。

TA貢獻1777條經驗 獲得超3個贊
這似乎有效
class Chassis {
func description() -> String {
return "Chassis"
}
}
class RacingChassis : Chassis {
override func description() -> String {
return "Racing Chassis"
}
func racingChassisMethod() -> String {
return "Wrooom"
}
}
class Car {
let chassis = Chassis()
}
class RaceCar: Car {
override var chassis: RacingChassis {
get {
return self.chassis
}
set {
self.chassis = newValue
}
}
}
var car = Car()
car.chassis.description()
var raceCar = RaceCar()
raceCar.chassis.description()
raceCar.chassis.racingChassisMethod()
- 3 回答
- 0 關注
- 1484 瀏覽
添加回答
舉報