在Swift WWDC会话介绍中,演示了只读属性description:

class Vehicle {
    var numberOfWheels = 0
    var description: String {
        return "\(numberOfWheels) wheels"
    }
}

let vehicle = Vehicle()
println(vehicle.description)

Select 上述方法而不是使用一种方法是否有任何影响:

class Vehicle {
    var numberOfWheels = 0
    func description() -> String {
        return "\(numberOfWheels) wheels"
    }
}

let vehicle = Vehicle()
println(vehicle.description())

在我看来, Select 只读计算(computed)属性最明显的原因是:

  • Semantics-在本例中,description是类的属性,而不是它执行的操作是有意义的.
  • Brevity/Clarity-避免在获取值时使用空括号.

显然,上面的例子过于简单,但还有其他好的理由 Select 其中一个吗?例如,函数或属性是否有一些特性可以指导您决定使用哪个?


N.B. At first glance this seems like quite a common OOP question, but I'm keen to know of any Swift-specific features that would guide best practice when using this language.

推荐答案

在我看来,这主要是一个风格的问题:我强烈喜欢用properties来表示:属性;这意味着可以获得和/或设置的简单值.我在实际工作中使用functions(或方法).可能需要从磁盘或数据库中计算或读取某些内容:在本例中,我使用一个函数,即使只返回一个简单的值.这样我就可以很容易地看出一个调用是便宜的(属性)还是可能昂贵的(函数).

当苹果发布一些快速编码约定时,我们可能会变得更加清晰.

Swift相关问答推荐

我应该在自定义存储队列上使用弱self 吗?

Swift 5.10:无法从非隔离的deinit访问属性*,这是Swift 6中的错误''''

体积单位从夸脱转换为杯似乎关闭了

字符串目录不适用于SWIFT包

如何设置两个不同的视图模型以在我的SwiftUI应用程序中使用相同的数据源?

正在接收具有不完整数据错误的URL请求

以编程方式使UIView居中,而不影响UIKit中其他UI类的位置

快速并行读取进程 standardOutput 和 standardError 而不会阻塞

表视图插座单元测试失败

在表单中对齐文本框

如何让默认函数参数引用另一个函数参数?

LeetCode 249. 分组移位字符串

令人满意的 var body:协议扩展中的一些视图

SwiftUI Observed Object 在发布值更改时未更新

阻止其他类型的键盘

swift中的SequenceType和CollectionType有什么区别?

NSFontAttributeName 已更改为 String

更改在变量的 willSet 块中设置的值

类型myViewController不符合 Swift 中的协议 UIPIckerDataSource

Swift 5 秒后关闭 UIAlertView