Я новичок в быстром. В группе классов/подклассов я хотел бы, чтобы переменная в суперклассе находилась в пределах требуемого диапазона. Например, в следующем коде.Настройка требований для переменных класса в Swift
class Vehicle {
var speed: Int
var heading: Int
init(speed: Int, heading: Int) {
self.speed = speed
self.heading = heading
}
func turnRight() {
if 360 - heading < 90 {
heading = heading - 270
} else {
heading = heading + 90
}
}
}
class Car : Vehicle {
init(speed: Int, heading: Int) {
super.init(speed: speed, heading: heading)
}
override func turnRight() {
speed = speed/2
if 360 - heading < 90 {
heading = heading - 270
} else {
heading = heading + 90
}
}
}
Что мне не нравится выше, является то, что если я создаю более подклассы для автомобиля, я всегда буду вынужден проверить, что заголовок находится в пределах 0 и 360. Я знаю о добытчиках и сеттеров, но есть ли способ использовать сеттер и по-прежнему поддерживать приращение переменной?
В идеале, я хочу, чтобы мои функции TurnRight выглядеть следующим образом:
func turnRight() {
heading = heading + 90
}
override func turnRight() {
speed = speed/2
heading = heading + 90
}
... и для моей переменной набор в суперкласс, чтобы обеспечить, что заголовок находится в пределах 0 и 360.
Ну, вы могли бы создать функцию, называемую changeHeadingBy с поплавком в качестве параметра, то просто вызвать эту функцию вместо того, чтобы проверить осанку каждый раз. Затем используйте это вместо вашего «добавления» во втором примере. – SaylorTwift2
Почему бы вам просто не называть 'super.turnRight()'? – Sulthan