快速获取值的首选方式是什么?
使用只读变量
var getString: String? {
return "Value"
}
或者使用函数?
func getString() -> String? {
return "Value"
}
另外,两者之间有性能差异吗?
首先,这两个名字都不是合适的。他们不应该开始于get
。 (可可的历史意义是get
前缀不是你的意思,所以即使你的意思是“到互联网上检索此信息”,你也想使用类似的东西fetch
,但肯定不是你给出的情况。)
这些问题在本指南的各个部分中得到解决Swift API 设计指南。首先,属性就是属性,无论是存储的还是计算的。因此,以下两者在设计上没有区别:
let someProperty: String?
and
var someProperty: String? { return "string" }
您不应仅仅因为命名是经过计算而更改它。然后我们可以在指南中看到:
其他类型、属性、变量和常量的名称应读作名词。
此外,正如所讨论的Swift 编程语言:
属性将值与特定的类、结构或枚举相关联。存储属性将常量和变量值存储为实例的一部分,而计算属性则计算(而不是存储)一个值。
因此,如果最好将其视为与类型(其“属性”之一)关联的值,那么它应该是一个属性(计算或存储)。如果它并不是真正与类型“关联”的东西(例如调用者希望该类型从其他地方检索的东西),那么它应该是一个方法。再次来自设计指南:
记录任何非 O(1) 的计算属性的复杂性。人们通常认为属性访问不涉及大量计算,因为他们将属性存储为心理模型。当该假设可能被违反时,请务必提醒他们。
如果“作为心智模型存储的属性”与您想要表达的意思不符,那么它可能首先不应该是属性(并且如果您无论如何将其设为属性,则需要记录差异)。因此,例如,访问属性通常应该没有明显的副作用。如果您在写入属性后立即读取该属性,则应该取回您写入的值(同样,作为一般心理模型,而无需陷入多线程编程的困境)。
如果您使用某种方法,通常会产生不同的适当名称。有关更多信息,请参阅设计指南的“努力流畅使用”部分。选择好的方法名称有几个规则。作为何时使用属性与方法的一个很好的例子,请考虑x.makeIterator()
, i.successor()
and x.sorted()
示例并思考为什么这些是方法以及为什么它们如此命名。这并不是说在所有情况下都有一个答案,但设计指南将为您提供 Swift 团队意图的示例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)