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

时间:2015-06-18 01:37:09

标签: ios swift oop encapsulation

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

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

如果没有,那么什么被认为是最佳做法? 谢谢。

3 个答案:

答案 0 :(得分:3)

当内部比这里显示的更复杂时,我使用这种类型的语法和计算变量来公开getter和setter:

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

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

但是大多数时候我很高兴只暴露普通变量并完成它:

var age: Int = 0

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果你想访问属性(Age)本身,你总是可以直接获取/设置它。

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

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

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