Swift中懒惰变量的优点是什么?

Dav*_*eek 22 swift

初始化的优点或区别是什么:

lazy var hintView: HintView = {
        let hintView = HintView()
        return hintView
}()
Run Code Online (Sandbox Code Playgroud)

而不是简单地使用:

var hintView = HintView()
Run Code Online (Sandbox Code Playgroud)

(HintView是:class HintView: UIView {})

非常感谢帮助.

Raj*_*ari 64

让我们实际做到这一点.查看截图

在此输入图像描述

我刚刚停止了调试器viewDidLoad.你可以看到它secondHintView有一个内存,因为它不是懒惰的存储,但hintView仍然是零,因为它是一个懒惰的.一旦使用/访问惰性变量,就会分配内存.

懒惰也应该是var.

  • @Anees您可以在等待响应的变量中使用惰性。`lazy var response` 因为在您调用服务之前响应不会出现。如果您想在 VC 上显示 customAlert 但并不总是添加到您的 VC 上,则可以使用惰性。它会根据某种条件添加。`lazy varalertView` 等 (2认同)

Luc*_*tti 26

懒惰存储的财产与存储的财产

懒惰的财产有一些优势,而不是存储的财产.

  1. 只有在读取该属性时才会执行与惰性属性关联的闭包.因此,如果由于某种原因未使用该属性(可能是因为用户的某些决定),则可以避免不必要的分配和计算.
  2. 您可以使用存储属性的值填充惰性属性.
  3. 你可以self在一个懒惰的属性的闭包内使用


PGD*_*Dev 6

一个懒惰的存储特性,当它第一次被访问的计算只。

varlet,因为该值不是在初始化过程中进行初始化。稍后进行计算。这就是为什么惰性存储属性必须是a variable而不是a的原因constant

lazy var hintView: HintView = {
        let hintView = HintView()
        return hintView
}()

let h = hintView
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,无论何时hintView首次访问,都将closure执行为其分配的值,并将该值返回并存储在中h

有关更多信息,请参考:

使用闭包时的Swift惰性存储属性与常规存储属性

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