2017-01-31 4 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에 의해 속도를 증가하고있어하지만 난 (그 훨씬 이해가되지 것이기 때문에)이 가속화 방법 속도는 최대 속도를 초과하지 않습니다. 고/저속이 어떻게 갈 수 있는지에 대한 범위를 설정하는 방법이 있습니까?

+1

는 마법의 단어 'if'를 사용하여이 작업을 수행하는 스위프 티의 방법은 세터 관찰자을 사용하는 것입니다. 마찬가지로,'speed + maxSpeed ​​/ 10 <= maxSpeed ​​(speed + = maxSpeed ​​/ 10}'면. – matt

+0

@matt가 말한 것을 사용하십시오. 이게 처음 근처에서 배울 점이 될 것 같습니다. –

답변

0

요구 사항을 얼마나 엄격하게 적용 할 것인지에 따라 다양한 방법이 있습니다. 당신은 단지 accelerate() 방법을 통해 증가에 speed하려면

, 당신은 체크에 넣을 수 있습니다 :

myVehicle.speed = 10000 
myVehicle.speed += 10 
:

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

이이 속성을 통해 speed을 변경하는 사용자를 방지하지 않습니다

speed에 대한 설정자를 숨길 수 있습니다.

private(set) var speed: Double 

그런데도 클래스의 다른 메서드가 의도하지 않게 제한을 초과하여이를 설정할 수 있습니다. 수표를 사방에 넣어야합니다. 당신은 클램프speed의 값을 요구하는

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

:


당신이 상관없이 당신이 그것을 변경하는 방법을 항상 maxSpeed 아래에있을하려면

는 속성 관찰자를 사용합니다.

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