ios - 在 swift 中获取值(value)的首选方式是什么,var 还是 func?

标签 ios swift

在 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/

相关文章:

iphone - 想使用 performselectoronmainthread 在特定方法中循环

javascript - 加速 HTML5 视频搜索?

ios - 内存压力和内存泄漏一样吗?

ios - 更改 NSAttributedString 文本颜色而无需再次设置标题

ios - Swift - iOS - 从多个数据源/其他 TableViewController 数据创建新闻源 TableView

ios - 解析 Facebook - clang : error: linker command failed with exit code 1 (use -v to see invocation)

ios - 将数据备份到服务器时验证用户

ios - Swift - UIButton 背景颜色在点击时不会改变

json - Swift:过滤 TableView 中的结果,因此它不会从 JSON 返回重复项

ios - 如何将 OR 运算符与可选绑定(bind)一起使用?