有人能帮助我理解swift中getter和setter的正确用法吗?我得到的印象是它和说Java不一样。
这是Swift中存储和访问类变量的正确用法吗?
class Person {
private var name: String
init(name: String) {
self.name = name
}
func setName(name: String) {
self.name = name
}
func getName() -> String {
return name
}
}
3条答案
按热度按时间rqqzpn5f1#
Swift为
getters
和setters
提供了比Java更结构化的方法。你可以,但你不应该****,像在你的代码中那样编写setter和getter。
相反(如果你使用的是
stored properties
),只需要声明一个非private
可见性的属性(例如,在我的例子中是internal
)。这样,你的类之外的调用者就可以看到该属性并更改它。好的,但是在java getter和setter中,允许我添加要在值更改之前或之后执行的自定义逻辑。
对!在Swift中,你可以使用
willSet
和didSet
观察器来实现这一点。将设置(新值)
您可以在这里写入要在属性中写入新值之前执行的程式码。您可以在这里使用
self.name
存取目前的值(即将被覆写),而新值则可以使用newValue
。didSet(旧值)
您可以在这里写入要在属性中写入新值之后执行的程式码。您可以在这里使用
oldValue
存取旧值(已被覆写),而新值则可以使用self.name
。willSet
和didSet
都是可选的[我不是在谈论可选类型!我的意思是你不被强迫写它们:)]。如果不需要运行某些代码只是
before
或after
的属性已经改变,就省略它们。示例
2skhul332#
如果你赋值给self.,你只需要再次调用这个方法。而且,没有像旧的Java bean属性模式那样的“get”。最后,如果你真的需要在设置后使用方法进行属性计算或操作,它们可以直接构建到变量定义中。
对于您的简单情况应该足够了,尽管您也可以
7gs2gvoe3#
下面是setter和getter在Java中的工作方式: