第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
        }()
    }
}

10-06 02:39