2017-01-31 8 views
-2

私はクラスとメソッドの作成に取り組んでおり、その中の1つの変数を増やすことを検討していますが、他の変数の入力を超えてはなりません。この方法で私は定義できる一定の限界までどのように増分するのですか?

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の1/10日までにスピードをインクリメントしていますが、私は(それはあまり意味がありませんので)maxSpeedを超える加速する方法で速度を望んでいません。どのように高/低速が行くことができる範囲を設定する方法はありますか?

+1

:それを行うにはSwiftyの方法はセッターオブザーバを使用することです。同様に、 'speed + maxSpeed/10 <= maxSpeed {speed + = maxSpeed/10}'ならば。 – matt

+0

@mattが言ったことを使ってください。これは、あなたが最初から学んでいたことでしょう。 –

答えて

0

要件を厳格に実行する方法によって、さまざまな方法があります。

あなたはaccelerate()メソッドを介してのみ増加にspeedにしたい場合は、あなたがチェックして置くことができます:

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の値を求めています。マジックワード `if`を使用

var speed : Double { 
    didSet(oldSpeed) { 
     if speed > maxSpeed { 
      speed = oldSpeed 
     } 
    } 
} 
関連する問題