2017-01-31 7 views
-2

Я работаю над созданием классов и методов, и в одном из них я хочу увеличить одну переменную, но не за пределами ввода другой переменной.Как увеличить до определенного предела, который я могу определить?

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 
} 

В методе я приращение скорости на 1/10 от MAXSPEED, но я не хочу, скорость в методе ускорения превышать MAXSPEED (поскольку это не имеет смысла). Есть ли способ установить диапазон, на котором может идти высокая/низкая скорость?

+1

Используйте волшебное слово 'if'. Например, 'если скорость + maxSpeed ​​/ 10 <= maxSpeed ​​{скорость + = maxSpeed ​​/ 10}'. – matt

+0

Используйте то, что сказал @matt. Похоже, это будет то, что вы узнаете в начале. –

ответ

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 
0

Вы просите зажим величина speed. Путь Swifty, чтобы сделать это, чтобы использовать сеттер наблюдатель:

var speed : Double { 
    didSet(oldSpeed) { 
     if speed > maxSpeed { 
      speed = oldSpeed 
     } 
    } 
}