惰性存储 属性 在 Swift

Lazy stored property in Swift

我对惰性存储有一些困惑 属性。 我阅读了很多教程并发现了这一点,但在真实场景中我无法理解这一点。 任何人都可以清除一些东西,

  1. 惰性存储属性是属性直到第一次使用才计算初始值...

  2. 您必须始终将惰性 属性 声明为变量(使用 var 关键字),因为在实例初始化完成之前可能无法检索其初始值...

  3. 当 属性 的初始值取决于外部因素时,延迟属性很有用,这些因素的值在实例初始化完成后才知道。

  4. 我们应该在哪里使用惰性存储属性

谢谢

Mike Buss 在 Swift http://mikebuss.com/2014/06/22/lazy-initialization-swift/

中写了一篇关于惰性初始化的文章

何时使用惰性初始化的一个例子是 属性 的初始值直到对象初始化后才知道 属性 的计算在计算上是昂贵的

以下是 post 中两种情况的两个示例:

在第一个示例中,我们不知道个性化问候语应该具有哪个值。我们需要等到对象被初始化才能知道这个人的正确问候语。

class Person {

var name: String

lazy var personalizedGreeting: String = {
    [unowned self] in
    return "Hello, \(self.name)!"
    }()

init(name: String) {
        self.name = name
    }
}

第二个示例涵盖了昂贵计算的情况。想象一个 MathHelper class 应该给你 pi 和其他重要常量的值。如果您只使用其中的一个子集,则不需要计算所有常量。

class MathHelper {

lazy var pi: Double = {
    // Calculate pi to a crazy number of digits
    return resultOfCalculation
    }()

}

解释的好!!我想添加一个简单的示例以更好地理解它。

Lazy属性是一个存储型属性,只有在实际使用该变量时才会分配内存

class Car{
    lazy var brand: String = "BMW" // Memory not allocated
}

let aCar = Car()
print(aCar.brand) // Memory allocated as it is getting used here