第248页上用Swift编程语言(Swift 2.1)编写的注释解释了以下内容:
全局常量和变量总是以类似于惰性存储属性的方式延迟计算。与惰性存储属性不同,全局常量和变量不需要用惰性修饰符进行标记。
局部常量和变量永远不会被延迟计算。
摘自:Apple Inc.“The Swift Programming Language(Swift 2.1)”。“https://itunes.apple.com/us/book/swift-programming-language/id881256329?mt=11
除了全局属性和局部值之外,是否还有其他类型的常量或变量会影响lazy
修饰符?
最佳答案
提供的摘录中的“局部常量和变量”指的是局部范围常量和变量,如函数的局部变量。它们不引用对象的属性,如果用lazy关键字标记,则这些属性可能是惰性的。
//global, declared outside of a class/struct
//error is "Lazy is only valid for members of a struct or class
lazy var label: UILabel = {
var tempLabel: UILabel = UILabel()
tempLabel.text = "hi"
return tempLabel
}()
class SomeClass : NSObject {
//non-lazy instance property
var x = 3
//lazy instance property
lazy var label: UILabel = {
var tempLabel: UILabel = UILabel()
tempLabel.text = "hi"
return tempLabel
}()
func doStuff() {
//error is "Lazy is only valid for members of a struct or class
lazy var label: UILabel = {
var tempLabel: UILabel = UILabel()
tempLabel.text = "hi"
return tempLabel
}()
}
}