初始化的优点或区别是什么:
lazy var hintView: HintView = {
let hintView = HintView()
return hintView
}()
而不是简单地使用:
var hintView = HintView()
(HintView
是:class HintView: UIView {}
)
非常感谢帮助。
答案 0 :(得分:53)
让我们实际做。见截图
我刚刚在viewDidLoad
停止了调试器。您可以看到secondHintView
有一个内存,因为不是懒惰的存储空间,但hintView
仍然是 nil ,因为它是懒惰一个。一旦使用/访问惰性变量,就会分配内存。
懒惰也应该是var。
答案 1 :(得分:18)
懒惰属性比存储属性有一些优点。
self
答案 2 :(得分:3)
延迟存储属性仅在第一次访问时计算。
它是var
而不是let
,因为在初始化过程中未初始化该值。它将在稍后计算。这就是为什么懒惰存储的属性必须是variable
而不是constant
。
lazy var hintView: HintView = {
let hintView = HintView()
return hintView
}()
let h = hintView
在上面的代码中,无论何时首次访问hintView
,都会执行分配给它的closure
,并返回值并存储在h
中。
有关详细信息,请参阅:
Swift lazy stored property versus regular stored property when using closure
答案 3 :(得分:0)
在某些情况下,使用lazy
vars可能会更快,因为它们只会在您第一次访问时计算一次。
答案 4 :(得分:0)
将变量的内容/计算结果放在单独的函数中以提高可读性也是一个好习惯,例如:
// MARK: Public views
lazy var titleView = getTitleView()
lazy var hintView = getHintView(.red)
lazy var secondHintView = getHintView(.blue)
lazy var thirdHintView = getHintView(.yellow)
lazy var fourthHintView = getHintView(.brown)
// MARK: Private functions
private func getTitleView() -> TitleView {
let view = TitleView()
return view
}
private func getHintView(_ textColor: UIColor) -> HintView {
let view = HintView()
view.textColor = textColor
return view
}
这样,您就可以重用某些功能,不必编写更少的代码,并且所有变量的可读性都更高。例如。我有5个独立的变量,但我一眼就能看到它们。