当我不使用getter或setter时,我想知道lazy关键字的含义。看看这段代码:
class ViewController: UIViewController
{
lazy var toto = 5
}
编译器接受lazy关键字,但我不知道为什么。懒惰意味着我只在阅读时计算出的价值。但是没有必要为整数值计算任何东西。
答案 0 :(得分:4)
lazy
表示在第一次访问时评估并分配存储属性的初始值(因此这实际上与getter无关)
或者与计算属性一起使用的setter。)
lazy var toto = ... some expression evaluating to an `Int` ...
定义了一个惰性Int
属性。
lazy
可用于延迟初始值的评估
直到需要财产,例如如果那个评估是
“昂贵”或有副作用。
但是从语言/编译器的角度来看,右边的初始值 可以是任意表达。 如果它是一个常量或涉及函数调用的“复杂”表达式并不重要。
lazy var a = 5 // A constant
lazy var b = someFunctionReturningAnInt() // Function call
lazy var c = { _ -> Int in
return 42
}() // Immediately evaluated closure
都是有效的定义。将lazy
与常量初始值一起使用没有任何优势,但它是有效的Swift。
答案 1 :(得分:2)
你应该只使用lazy初始化一个新的类变量。 official Swift guide提供了一个非常好的示例,摘要如下:
class DataImporter {
init() {
//importing data, non-trivial task
}
}
class DataManager {
lazy var dataImporter = DataImporter()
init() {
//here, dataImporter is not yet created because it is lazy to move its ass~
}
let manager = DataManager() // manager.dataImporter is NOT created yet
manager.dataImporter //ONLY now it is created