【发布时间】:2016-08-16 18:13:32
【问题描述】:
我想澄清一下我是否正确理解了以下概念。
假设我的目标是将String "Good morning, Mike" 存储到变量var sayGoodMorningToUser 中。
String由两个变量组成,即
var greeting = "Good morning, "
var username = "Mike"
如果我使用存储属性与计算属性有什么区别,换句话说:
var sayGoodMorningToUserStored = greeting + username
对比
var sayGoodMorningToUserComputed:String {
return greeting + username
}
我看到这两种方法的唯一区别是任何人都可以轻松直接地更改 sayGoodMorningToUserStored 的值,例如通过写作
var sayGoodMorningToUserStored = "myNewChangedValue"
而变量 sayGoodMorningToUserComputed 不能直接修改,因为它不能简单地设置为新的字符串值:
var sayGoodMorningToUserComputed = "Hallo" //this would cause an error
否则我无法理解为什么人们计算变量而不是简单地写
var sayGoodMorningToUserStored = greeting + username.
如果我理解正确,谁能解释一下?或者计算变量与存储变量相比还有其他优势吗?
我想将我的问题仅限于可获取变量,因为在这里讨论可设置变量会超出范围。
【问题讨论】:
-
计算属性的目的是您声明一次,当
username更改时,计算的“greeting”属性将自动更新以反映这一点。因此,如果username发生更改,您也不必记得去更新sayGoodMorningToUserStored。如果您在代码中的其他地方引用它,它将自动反映username的当前值,而不是sayGoodMorningToUserStored首次声明时的username原样。 -
我现在能想到的主要区别在于协议和协议扩展。使用协议不能保持状态,因此计算值是最好的。
-
@Pisan 如果您觉得您的问题已得到满足,请评价将问题标记为已接受。
标签: swift properties