如何增加到我可以定义的特定限制?

时间:2017-01-31 22:39:10

标签: swift class limit increment

我正致力于创建类和方法,在其中一个方面,我希望增加一个变量,但不要超出另一个变量的输入。

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(因为那不是很有意义) )。有没有办法设定高速/低​​速的范围?

2 个答案:

答案 0 :(得分:0)

有多种方法可以执行此操作,具体取决于您要严格执行要求的程度。

如果您希望speed仅通过accelerate()方法增加,则可以进行检查:

func accelerate() {
    speed = min(speed + maxSpeed/10, maxSpeed)
}

这不会阻止用户通过属性更改speed

myVehicle.speed = 10000
myVehicle.speed += 10

所以你可能想要隐藏speed

的setter
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 
        }
    }
}
相关问题