2017-01-31 65 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 
} 

在該方法中,我被MAXSPEED的1/10的遞增速度,但我不希望速度在加速方法超過MAXSPEED(因爲這沒有多大意義)。有什麼方法可以設置高/低速度的範圍?

+1

使用口令字'if'。就像'if speed + maxSpeed/10 <= maxSpeed {speed + = maxSpeed/10}'。 – matt

+0

使用@matt說的。看起來這將是你一開始就會學到的東西。 –

回答

0

有多種方式可以做到這一點,具體取決於您希望執行您的要求的嚴格程度。

如果你想speed只能通過accelerate()方法增加,你可以把一個檢查:

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

這不會阻止用戶從通過屬性改變speed

myVehicle.speed = 10000 
myVehicle.speed += 10 

所以你可能想隱藏setter爲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 
     } 
    } 
} 
相關問題