【问题标题】:Swift: why lazy, computed property, and property observer can not be letSwift:为什么不能让惰性、计算属性和属性观察者
【发布时间】:2020-03-03 21:15:55
【问题描述】:

我一直在寻找为什么惰性、计算属性和属性观察者不能是(让)常量,我知道例如惰性在被访问之前不会被分配,但为什么它不能是(让),是吗?意味着懒惰在被访问并分配给我们分配的值之前将持有一个 nil 值或任何值?请为计算属性和属性观察者解释同样的事情。

【问题讨论】:

  • 你可以很容易地测试它什么时候会有一个值,只需在lazy 块内放一个print。在您访问该值之前,它不会被触发。在此之前,该值甚至不是nil。它从未定义过。有关更多信息,请参阅here

标签: ios swift lazy-evaluation let


【解决方案1】:

规则:-

  1. 您可以使用letvar 关键字声明属性。
  2. 在swift中,let变量必须在let变量的所有者被初始化之前被初始化。
  3. let 变量赋值后,您将无法再次更改其值。

现在让我们一一查看所有三种类型的属性:-

  1. 惰性变量 - 它在所有者初始化后初始化。所以,这里违反了规则 2。
  2. 计算变量 - 每当您访问计算变量时,它都会在一些计算/操作后返回值。所以,这里违反了规则 3。
  3. 属性观察者 - 属性观察者的didSetwillSet 在您更改其值时被调用。所以,这里违反了规则 3。

【讨论】:

  • “所有者”一词是指对象吗?
【解决方案2】:

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

计算属性:计算属性计算(而不是存储)一个值。相反,它们提供了一个 getter 和一个可选的 setter 来间接检索和设置其他属性和值。

属性观察者 : 属性观察者是监视属性值的变化,如果你定义它 let 那么你如何监视变化,因为 let 是一种常量,在初始化后你不能改变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-22
    • 2015-06-15
    • 2017-04-25
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    相关资源
    最近更新 更多