这段代码中的 didSet 逻辑真的让我很困惑,这是怎么回事?

didSet logic in this code is really confusing me, whats happening?

注意:这个程序基本上是为了打印到控制台输出window,我也把整个程序都贴出来了,这样就不会把回答我基本问题的人搞糊涂了。

问题:'didSet'观察者是如何工作的,我很困惑,代码是什么:'? slowdown : speedup' 在代码之后:'(speed > speedLimit)' for?然后它在最后调用 changeSpeed() ??

changeSpeed 只是一个空变量函数,这里的整个 didSet 逻辑令人困惑,尤其是 '?'代码前:'slowdown: speedup'

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 逻辑完全让我失望了,我对整个程序越来越困惑了??我从一本 swift 书中得到了这个。

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

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

didSet 中的逻辑因此,本质上说:

  1. 我们要改变我们的速度。如果我们超过限速,我们会很快减速,否则,我们会很快加速。
  2. 继续改变。我们已经达到限速了吗?如果没有,请重复此更改,直到我们达到速度限制。
  3. 每次我们改变速度(见第 2 步)时,打印一条关于它的消息。