gpt4 book ai didi

swift - 这段代码中的 didSet 逻辑真的让我很困惑,发生了什么?

转载 作者:行者123 更新时间:2023-11-30 10:12:08 25 4
gpt4 key购买 nike

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

问题:'didSet'观察者在这里如何工作,我很困惑,代码是什么:'?代码后的“减速:加速”:“(speed > speedLimit)”为?然后最后调用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 逻辑完全让我失望,我对整个程序越来越困惑?我从一本快速的书中得到了这个。

最佳答案

? : 称为三元运算符,用作条件 ? valueIfTrue : valueIfFalse 。行 var changeSpeed: () -> () = (speed > speedLimit) ?减速:加速相当于:

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

因此,didSet 中的逻辑本质上是这样的:

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

关于swift - 这段代码中的 didSet 逻辑真的让我很困惑,发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32385060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com