Swift编程语言(Swift 2.1)中的第248页注释解释了以下内容:
全局常量和变量总是懒惰地计算,与Lazy Stored Properties类似。与延迟存储的属性不同,全局常量和变量不需要使用延迟修饰符进行标记。
局部常量和变量永远不会懒惰计算。
摘自:Apple Inc.“Swift编程语言(Swift 2.1)。”https://itunes.apple.com/us/book/swift-programming-language/id881256329?mt=11
除了lazy
修饰符会产生影响的全局属性和局部值之外,还有其他类型的常量或变量吗?
答案 0 :(得分:2)
"局部常数和变量"在提供的摘录中引用局部范围常量和变量,如在函数的局部变量中。它们不引用对象的属性,如果它们用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
}()
}
}
答案 1 :(得分:0)
全局在这里指的是在括号{ }
中声明在之外的变量和常量,例如
var anotherProerty : AClass() //This will be lazy by default
Class Abc
{
var aProperty : AClass() // This will NOT be lazy by default
//however it can be lazy by declaring it with 'lazy' KEYWORD
func abc()
{
var another: AClass() //This cannot be lazy
}
}