我想澄清一下我是否正确理解了以下概念。
假设我的目标是将 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.
谁能解释一下我是否理解正确?或者计算变量与存储变量相比还有其他优势吗?
我只想将我的问题限制在可获取的变量上,因为在这里讨论可设置的变量会超出范围。
最佳答案
你的例子的不同之处在于:
var sayGoodMorningToUserStored = "myNewChangedValue"
和
var sayGoodMorningToUserStored = greeting + username
在你的类初始化时设置,而这个:
var sayGoodMorningToUserComputed:String {
return greeting + username
}
每次访问属性时都会计算。
这个简单的例子是一个类,它有一个 firstName
和 lastName
,但还需要 fullName
。使用普通属性,每次更新 firstName
或 lastName
时,您还必须更新 fullName
以便匹配。使用计算属性,每次访问 fullName
时,您都会获得最新信息。
关于swift - 计算属性(仅限可获取的属性)与存储属性的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38981781/