swift - 计算属性(仅限可获取的属性)与存储属性的优势

标签 swift properties

我想澄清一下我是否正确理解了以下概念。

假设我的目标是将 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
}

每次访问属性时都会计算。

这个简单的例子是一个类,它有一个 firstNamelastName,但还需要 fullName。使用普通属性,每次更新 firstNamelastName 时,您还必须更新 fullName 以便匹配。使用计算属性,每次访问 fullName 时,您都会获得最新信息。

关于swift - 计算属性(仅限可获取的属性)与存储属性的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38981781/

相关文章:

ios - 使用 XPATH、Swift 从 html 网站提取值

c# - 什么格式需要成为一个属性?

C# : Make a property for a variable with a different name (shortcut)?

swift - 模块作为 Xcode 项目中的独立框架

objective-c - 为什么我必须选派代表?

c# - IronPython 中的属性 : eternal loop

ios - 使用不受实例变量支持的属性

Swift Array.sort() 不接受速记格式的闭包

ios - 使用未解析的标识符 'addChild'

ios - 从另一个 ViewController 中移除 subview