为什么延迟变量/计算属性,而不仅仅是方法

时间:2016-03-29 11:42:24

标签: swift lazy-evaluation computed-properties

为什么Swift有"懒惰变量的概念"和"计算属性",当看起来简单的方法或函数适合此目的时?

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

1 个答案:

答案 0 :(得分:4)

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

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

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

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