在每个字段上获取和设置 Java

Get and Set on each field like in Java

我试图在整个互联网上寻找在 Swift 中封装数据的最佳实践。我只找到了一些关于实例变量的 get 和 set 方法的信息。它们过去的工作方式与 C# 的设置非常相似,但现在它们作为计算属性工作,不能在 setters 中设置它们,也不能在 getters 中获取它们。问题是:人们仍然为 swift 中的 class 中的每个 属性 创建 getter 和 setter 吗?喜欢:

private var age: Int = 0
public func getAge() -> Int {
    return age
}
public func setAge(newAge: Int) {
    self.age = newAge
}

如果不是,那么最佳做法是什么? 谢谢。

我认为您不需要创建 getX/setX 方法,因为您始终可以从存储方法更改为计算方法 属性,而无需更改客户端的源代码。就像您可以更改 getAge 和 setAge 方法的主体一样,所以我看不出不让客户使用 age 在 swift 中获得了什么。

当内部结构比这里显示的更复杂时,我将这种类型的语法与计算变量一起使用来公开 getter 和设置器:

internal var _age: Int = 0
var age: Int {
    get {
        return _age
    }
    set {
        _age = newValue
    }
}

大量语法糖可以轻松隐藏某些表达式中的复杂性。

但大多数时候我很乐意只公开普通的 var 并完成它:

var age: Int = 0

这样做的好处是,当您想在 getters 和 setter 中做更多工作时,两种方式都可以轻松交换。

如果您想访问 属性(年龄)本身,您总是可以直接 get/set 它。

let theGirlsAge = Age; // Get
Age = theBoysAge; // Set

Getter 和 Setter 用于定义 属性 和其他属性之间的关系。

public func getAge() -> Int {
    return theBoysAge 
}
public func setAge(newAge: Int) {
    theGirlsAge = newAge
}