什么是斯威夫特的懒惰意义?

时间:2017-05-24 09:05:58

标签: ios swift

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

3 个答案:

答案 0 :(得分:7)

该词在两种情况下使用。

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

    var x: Int = someExpensiveFunction()
    

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

    lazy var x: Int = someExpensiveFunction()
    

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

  • 延迟序列是在需要时计算某些操作的序列。例如,在此代码中

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

    直接完全计算映射序列。但是在下面的

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

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

我认为,从技术上讲,在第二种情况下,lazy并未用作关键字,但我将其包含在内以保证完整性。

答案 1 :(得分:3)

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

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

结帐this参考了解更多信息。

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

答案 2 :(得分:1)

延迟属性的意思是它们仅在首次需要时才计算,之后保存它们的值。

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

看一下这个链接,以便更好地理解它..

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