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