在 swift 中获取值的首选方法是什么? 使用只读变量
var getString: String? {
return "Value"
}
还是使用函数?
func getString() -> String? {
return "Value"
}
另外,两者在性能上有区别吗?
最佳答案
首先,这些都不是合适的名称。它们不应以 get
开头。 (get
前缀在 Cocoa 中有历史意义,但您并不是这个意思,所以即使您的意思是“上网并检索此信息”,您也想使用类似 fetch
,但肯定不是你给出的情况。)
这些问题在 Swift API Design Guidelines 的各个部分中得到解决。 .首先,属性就是属性,无论是存储的还是计算的。所以在设计上没有区别:
let someProperty: String?
和
var someProperty: String? { return "string" }
你不应该仅仅因为它是计算出来的就改变命名。然后我们可以在指南中看到:
The names of other types, properties, variables, and constants should read as nouns.
此外,如 The Swift Programming Language 中所述:
Properties associate values with a particular class, structure, or enumeration. Stored properties store constant and variable values as part of an instance, whereas computed properties calculate (rather than store) a value.
因此,如果最好将其视为与类型相关联的值(其“属性”之一),那么它应该是一个属性(计算或存储)。如果它不是真正与类型“关联”的东西(例如,调用者希望此类型从其他地方检索的东西),那么它应该是一个方法。再次来自设计指南:
Document the complexity of any computed property that is not O(1). People often assume that property access involves no significant computation, because they have stored properties as a mental model. Be sure to alert them when that assumption may be violated.
如果“作为心智模型存储的属性”与您要表达的意思不符,那么它可能首先不应该是一个属性(如果您仍然将其作为一个属性,您需要记录差异).因此,例如,访问属性通常应该没有可见的副作用。如果您在写入一个属性后立即读取它,您应该取回您写入的值(同样,作为一种通用的心智模型,无需进入多线程编程的杂草)。
如果您使用一种方法,它通常会产生不同的适当名称。有关更多信息,请参阅设计指南的“力求流畅使用”部分。选择好的方法名有几个规则。作为何时使用属性与方法的一个很好的例子,请考虑 x.makeIterator()
、i.successor()
和 x.sorted()
示例并思考为什么这些是方法以及为什么它们被命名为它们。这并不是说在所有情况下都只有一个答案,但设计指南将为您提供示例,说明 Swift 团队的意图。
关于ios - 在 swift 中获取值(value)的首选方式是什么,var 还是 func?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39747338/