Swift中

时间:2017-05-29 10:11:30

标签: swift lazy-evaluation

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

  1. 惰性存储属性是一个属性,其初始值在第一次使用之前不会计算...

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

  3. 当属性的初始值依赖于在实例初始化完成后才知道其值的外部因素时,惰性属性很有用。

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

  5. 由于

2 个答案:

答案 0 :(得分:3)

Mike Buss写了一篇关于Swift http://mikebuss.com/2014/06/22/lazy-initialization-swift/

中延迟初始化的文章

何时使用延迟初始化的一个示例是,在初始化对象之后属性的初始值计算属性的计算成本高时强>

以下两个案例来自帖子:

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

class Person {

var name: String

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

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

第二个例子涵盖了昂贵计算的情况。想象一下MathHelper类,它应该为你提供pi和其他重要常量的值。如果只使用它们的子集,则不需要计算所有常量。

class MathHelper {

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

}

答案 1 :(得分:0)

解释的很好!!我想添加一个简单的例子来更好地理解它。

惰性属性是一种存储属性,只有在实际使用变量时才会分配其内存。

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

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