【问题标题】:Using Swift Computed Properties Vs. Accessor and Mutator Functions使用 Swift 计算属性 Vs。访问器和修改器函数
【发布时间】:2016-05-20 06:10:15
【问题描述】:

来自 Java 背景,其中 getter 和 setter 通常用于为私有字段提供公共接口,我将 swift 中的计算属性视为此类访问器和修改器方法的集成修改。我了解计算属性旨在修改或检索任何其他字段的值,同时为其他代码提供功能。 鉴于 Swift 计算属性似乎与 Java getter 和 setter 具有相同的用途和用法,那么以下 swift 声明是否存在显着的性能差异?与访问器和修改器相比,使用计算属性是否有任何性能优势?

计算属性

    private var privateField: Int = 0

    var field: Int { get { return privateField } set { privateField = newValue } }

Getter/Setter

private var privateField: Int = 0

func getField() -> Int {
    return privateField
}

func setField(newValue: Int) {
    privateField = newValue
}

在可读性方面,我个人认为分离方法的方式看起来更整洁更有条理,如果没有性能问题我会使用它而不是get {} set {}

【问题讨论】:

  • 删除了 [java] 标记,因为它似乎不需要关于 Java 的答案。
  • 不要。您提到的 getField/setField 构造可能是 Objective-C 历史中的一个混淆,因为这就是声明属性的方式,而且它很丑陋。在 Swift 中,这意味着你没有一个名为“field”的字段,你有两个名为“getField”和“setField”的方法。不大好。而且你不能使用“willSet”和“didSet”。

标签: swift performance


【解决方案1】:

这里的关键是编写惯用的 Swift 代码; Swift 中的一个属性应该是:

var field: Int = 0 {
    didSet {
        //Any consequences of setting here
    }
}

您的getField()/setField() 解决方案不寻常,不是该语言的预期用途。可读性是这里最重要的方面,但这与性能是一致的:我相信随着语言的进一步开发和优化,它肯定会确保它自己的惯用代码继续快速运行,但它可能并不关心性能你的getField()/setField()

【讨论】:

    猜你喜欢
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多