这段代码中的 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 : valueIfFalse
。 var changeSpeed: () -> () = (speed > speedLimit) ? slowdown : speedup
行等同于:
var changeSpeed: () -> ()
if speed > speedLimit {
changeSpeed = slowdown
} else {
changeSpeed = speedup
}
didSet
中的逻辑因此,本质上说:
- 我们要改变我们的速度。如果我们超过限速,我们会很快减速,否则,我们会很快加速。
- 继续改变。我们已经达到限速了吗?如果没有,请重复此更改,直到我们达到速度限制。
- 每次我们改变速度(见第 2 步)时,打印一条关于它的消息。
注意:这个程序基本上是为了打印到控制台输出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 : valueIfFalse
。 var changeSpeed: () -> () = (speed > speedLimit) ? slowdown : speedup
行等同于:
var changeSpeed: () -> ()
if speed > speedLimit {
changeSpeed = slowdown
} else {
changeSpeed = speedup
}
didSet
中的逻辑因此,本质上说:
- 我们要改变我们的速度。如果我们超过限速,我们会很快减速,否则,我们会很快加速。
- 继续改变。我们已经达到限速了吗?如果没有,请重复此更改,直到我们达到速度限制。
- 每次我们改变速度(见第 2 步)时,打印一条关于它的消息。