我正致力于创建类和方法,在其中一个方面,我希望增加一个变量,但不要超出另一个变量的输入。
class Vehicle{
let name: String
let weight: Double
let maxSpeed: Double
var speed: Double = 0
var heading: Double = 0
init(name: String, weight: Double, maxSpeed: Double) {
self.name = name
self.weight = weight
self.maxSpeed = maxSpeed
}
func accelerate() {
speed += maxSpeed/10
}
在这种方法中,我将速度提高了maxSpeed的十分之一,但我不希望加速方法的速度超过maxSpeed(因为那不是很有意义) )。有没有办法设定高速/低速的范围?
答案 0 :(得分:0)
有多种方法可以执行此操作,具体取决于您要严格执行要求的程度。
如果您希望speed
仅通过accelerate()
方法增加,则可以进行检查:
func accelerate() {
speed = min(speed + maxSpeed/10, maxSpeed)
}
这不会阻止用户通过属性更改speed
:
myVehicle.speed = 10000
myVehicle.speed += 10
所以你可能想要隐藏speed
:
private(set) var speed: Double
即便如此,您班级中的其他方法也可能无意中将其设置为超出限制。你必须到处检查。
如果您希望它无论如何更改都始终低于maxSpeed
,请使用属性观察者:
class Vehicle {
var speed: Double {
didSet {
speed = min(speed, maxSpeed)
}
}
}
let truck = Vehicle(name: "Ford F150", weight: 3000, maxSpeed: 200)
truck.speed = 300
print(truck.speed) // limited to 200
truck.accelerate()
print(truck.speed) // still 200
答案 1 :(得分:0)
您要求钳制 speed
的值。 Swifty方法是使用 setter observer :
var speed : Double {
didSet(oldSpeed) {
if speed > maxSpeed {
speed = oldSpeed
}
}
}