В вашем реальном примере:
Автомобиль currentSpeed
является сохраненным свойством.Это означает, что вы можете назначить его напрямую, и значение свойства изменится.
AutomaticCar currentSpeed
фактически является другим свойством - вычисляется имущество.Это означает, что когда вы присваиваете ему все, что происходит, запускается функция set
.В результате значения сохраненных свойств не изменятся, если только вы не измените их прямо здесь, в функции set
.
Ну, в вашем AutomaticCar's currentSpeed
set
функция, вы не сохранили новое значение в сохраненном свойстве, автомобиль currentSpeed
.Поэтому оно не изменилось, потому что ничего не произошло, что изменило бы его.
Как правильно сказал Хэмиш в комментарии, то, что вы имели в виду , чтобы сказать, вероятно, так:
class AutomaticCar: Car {
override var currentSpeed: Double {
didSet {
self.gear = Int(self.currentSpeed/10) + 1
}
}
}
В этой формулировке AutomaticCar currentSpeed
не является вычисляемым свойством;это - это Vehicle currentSpeed
- это то же самое сохраненное свойство, что и наблюдатель-установщик.Поэтому, установив его, он устанавливает его, сохраняя новое значение - плюс теперь мы запускаем наблюдатель-установщик и вносим изменения в self.gear
, которые вам нужны.
Обратите внимание, что переопределение сохраненного свойства в подклассе должно бытьодно или другое, либо независимое вычисляемое свойство, либо исходное сохраненное свойство с добавлением наблюдателя-установщика.Сам по себе он не может быть независимым хранимым свойством.