【问题标题】:What is lazy meaning in Swift? [duplicate]Swift 中的惰性是什么意思? [复制]
【发布时间】:2017-05-24 09:05:58
【问题描述】:

我经历了多个关于堆栈溢出的问题,但我没有得到一个答案,可以定义什么是“LAZY”关键字以及我们为什么在 Swift 中使用它。我对 Swift 很陌生,请解释一下。

【问题讨论】:

  • 非常感谢......我现在明白了。
  • 很高兴听到它:)

标签: ios swift


【解决方案1】:

这个词在两​​种情况下使用。

  • 惰性变量是一种存储属性,计算一次但直到第一次被引用时才计算。如果我有这个:

    var x: Int = someExpensiveFunction()
    

    它是在实例化其拥有的对象时计算的。如果我这样做

    lazy var x: Int = someExpensiveFunction()
    

    直到我第一次使用x时才计算出来。

  • 惰性序列是根据需要计算一些操作的序列。例如在这段代码中

    [1, 2, 3].map { someExpensiveFunction($0) }
    

    映射的序列立即被完全计算。但是在下面

     [1, 2, 3].lazy.map { someExpensiveFunction($0) }
    

    最终序列的每个连续元素仅在被请求时计算,例如通过迭代器。

我想,从技术上讲,在第二种情况下,lazy 没有被用作关键字,但为了完整起见,我将其包括在内。

【讨论】:

  • 非常感谢...我现在明白了
【解决方案2】:

lazy 存储属性是一个属性,其初始值在第一次使用之前不会计算。您可以通过在声明之前写入惰性修饰符来指示 lazy 存储属性。

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

结帐this 参考以获取更多信息。

所以基本上,您可以将lazy 视为对昂贵工作的即时计算。这些变量是使用您仅在首次请求该变量时指定的函数创建的。如果从未请求过,则该函数永远不会运行,因此它确实有助于节省处理时间。

【讨论】:

  • 非常感谢......我现在明白了
【解决方案3】:

惰性属性的关键在于它们仅在第一次需要时才计算,然后保存它们的值。

它避免了复杂类的不必要初始化,因此它们只会在您访问它们时创建..

查看此链接以更好地理解它..

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html

【讨论】:

  • 非常感谢..我现在明白了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 2015-07-15
  • 2018-07-17
  • 2012-08-13
  • 2021-03-12
  • 2019-09-12
  • 2015-01-22
相关资源
最近更新 更多