gpt4 book ai didi

swift - 什么时候不需要使用 lambda 执行来初始化惰性变量?

转载 作者:行者123 更新时间:2023-11-28 11:36:30 26 4
gpt4 key购买 nike

通常,许多 Swift 开发人员通过执行 lambda 来初始化惰性变量。但是我不明白为什么他们在一行计算时使用 lambda。以下代码示例之间有什么不同?

var x = 7
var y = 9
lazy var z = x * y
var x = 7
var y = 9
lazy var z: Int = {
return x * y
}()

我是 swift 的新手,从天真的角度来看,区别如下:

  • 第一个示例立即计算x * y以惰性方式初始化值
  • 第二个示例以惰性方式计算初始化。

是否正确?


这个问题不是重复的 What is the advantage of closure stored property Initialisation?因为它是关于惰性计算的。

最佳答案

以第二种方式做的人是在犯错误,仅此而已。

这个错误很容易犯。有时 (1) 需要定义并调用初始化程序,即当您需要多个代码语句来获取变量的初始值时:

let timed : Bool = {
if val == 1 {
return true
} else {
return false
}
}()

有时(2)你需要惰性初始化,即为了在属性初始化时提及self:

lazy var arrow : UIImage = self.arrowImage()

有时 (3) 你需要同时做两件事:

lazy var prog : UIProgressView = {
let p = UIProgressView(progressViewStyle: .default)
p.alpha = 0.7
p.trackTintColor = UIColor.clear
p.progressTintColor = UIColor.black
p.frame = CGRect(x:0, y:0, width:self.view.bounds.size.width, height:20)
p.progress = 1.0
return p
}()

因此,出于习惯、误解或非常谨慎的考虑,很自然地会采用表格 3,而实际上只有一行,而您所需要的只是表格 2。这是一个容易犯的错误,但无害。

关于swift - 什么时候不需要使用 lambda 执行来初始化惰性变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55194250/

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