2

为什么 Swift 有“惰性变量”和“计算属性”的概念,而简单的方法或函数似乎适合此目的?

在计算 Pi的耗时情况下,这不应该是一种方法吗?在这种情况下也是如此。为什么要强制某些东西成为显然更复杂的变量/属性?

4

1 回答 1

4

答:存在延迟变量以减少加载时间(即出于优化原因)。除非明确要求,否则不需要立即使用某些变量。他们Math.pi可能需要一段时间来计算。因此,当最重要的用户启动操作完成时,应用程序可能会在后台线程中开始计算它们。

至于计算属性,我认为这更像是一种语言决定。Objective-C 很久以前就引入了属性,并且它们在技术上一直是“计算的”(使用 getter 和 setter,无论是自动合成/显式实现),它曾经是(并且现在是)被广泛接受的特性。为什么?我不确定。也许这个问题没有“一个明确的答案”。就像我说的,我相信这是一个语言决定,而不是可以完全合理化的东西。

.property就我个人而言,使用相同的语法而不是函数来读取property()和写入属性感觉更直观。setProperty(_: Property)这是一种抽象,语言抽象是为了舒适/易用而存在的。您的示例非常人为,Apple 的框架中成千上万的人使用了计算属性。并非每个计算属性都需要非常耗时,而且其中大多数实际上是即时的;因此他们被抽象成这样的感觉。

当您考虑它时,一切都是从技术上计算出来的。例如,即使您将整数值直接设置为结构字段,也有一些事情需要在较小的范围内发生。这些低级计算被抽象为感觉像是非计算的具体实体,而实际上它们是。这一切都归结为抽象。

于 2016-03-29T12:01:26.230 回答