这个代码中的didSet逻辑让我很困惑,发生了什么事?

时间:2015-09-03 20:42:01

标签: swift properties observer-pattern

注意:这个程序基本上是打印到控制台输出窗口,我也粘贴了整个程序,这样就不会混淆谁回答我的基本问题。

问题:'如何设置'观察员在这里工作,我很困惑,代码是什么:'?减速:加速'在代码之后:'(speed> speedLimit)'对于?然后它在最后调用changeSpeed()??

changeSpeed只是一个空变量函数,这里的整个didSet逻辑特别令人困惑,'?'在代码之前:'减速:加速'

 
class Vehicle { 

var speed: Int 

var speedLimit: Int { 

willSet { 

println("Preparing to change speed to \(newValue) MPH") 

}


didSet { 

  var changeSpeed: () -> () = (speed > speedLimit) ? slowdown : speedup 

  while speed != speedLimit {

  changeSpeed()
  println("Now I'm driving \(speed) MPH because the speed limit changed to \(speedLimit) MPH from \(oldValue) MPH\n") 

 } 

} 

 init(speedLimit: Int, speed: Int) { 

 self.speedLimit = speedLimit 

 self.speed = speed 

println("Speed limit is \(speedLimit) MPH, I'm driving: \(speed) MPH")            } 

func speedup() { 

println("Speeding up to \ \(--speed) MPH...") 

     } 

  } 


 let car = Vehicle(speedLimit: 65, speed: 65) 

   car.speedLimit = 55 
   car.speedLimit = 70

//对不起任何困惑但这里的didSet逻辑完全让我失望,我对整个程序感到更加困惑?我从一本快速的书中得到了这个。

1 个答案:

答案 0 :(得分:1)

? :称为三元运算符,用作condition ? valueIfTrue : valueIfFalse。第var changeSpeed: () -> () = (speed > speedLimit) ? slowdown : speedup行等同于:

var changeSpeed: () -> ()
if speed > speedLimit {
    changeSpeed = slowdown
} else {
    changeSpeed = speedup
}

didSet中的逻辑因此基本上说:

  1. 我们要改变速度。如果我们超过速度限制,我们很快就会放慢速度,否则,我们很快就会加速。
  2. 继续改变。我们还在限速吗?如果没有,请重复此更改,直到达到速度限制。
  3. 每次我们更改速度(请参阅步骤2),请打印相关信息。
相关问题