swift - 带闭包的惰性变量

标签 swift lazy-evaluation

在此article ,它说(引用下面的代码):“您必须使用 lazy 来防止多次创建闭包。”

private lazy var variable:SomeClass = {
    let fVariable = SomeClass()
    fVariable.value = 10
    return fVariable
}()

为什么 lazy 会阻止多次创建闭包?为什么缺少惰性会导致它多次求值?

最佳答案

你引用的教程代码是这样的:

private lazy var variable:SomeClass = {
    let fVariable = SomeClass()
    fVariable.value = 10
    return fVariable
}()

对比一下:

private var variable:SomeClass {
    let fVariable = SomeClass()
    fVariable.value = 10
    return fVariable
}

第一个将 variable 初始化为新创建的 SomeClass 实例,最多一次(甚至可能不会那么多次)。第二个是只读计算变量,每次读取其值时都会创建一个新的 SomeClass 实例。

关于swift - 带闭包的惰性变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33114865/

相关文章:

ios - 是否可以将闭包传递给选择器?

ios - 在 Swift 中为 iOS 设计填字游戏网格

io - 在haskell中读取大文件?

Ruby - 延迟计算哈希

Swift Struct with Lazy,符合协议(protocol)的私有(private)属性(property)

swift - UIView alpha 在第一次调用更改后不会更新。 ( swift 4.2)

ios - 使用 Swinject 将 ViewModel 有条件注入(inject)到 ViewController 中

ios - 在 Swift(iOS)和 setValue forKey 中子类化 NSObject 的子类

Python,惰性列表

multithreading - Scala Stream尾部懒惰和同步