有人可以帮助我理解快速使用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
}
}
Run Code Online (Sandbox Code Playgroud)
Luc*_*tti 20
斯威夫特提供了更结构化的方法getters和setters那么Java.
你可以,但你应该不会像你在你的代码一样,写getter和setter方法.
相反(如果您正在使用stored properties)只是声明具有可见性的属性private(例如internal在我的示例中).这样,您班级以外的来电者将能够看到该属性并进行更改.
class Person {
var name: String {
willSet(newValue) {
print("\(self.name) is going to be renamed as \(newValue)")
}
didSet(oldValue) {
print("\(oldValue) has been renamed as \(self.name)")
}
}
init(name: String) {
self.name = name
}
}
Run Code Online (Sandbox Code Playgroud)
对!在Swift中,您可以使用willSet和didSet观察者来完成此操作.
在此处写入要在属性中写入新值之前要运行的代码.在这里,您可以self.name在新值可用时访问当前值(也会被覆盖)newValue.
在此处写入要在属性中写入新值后要运行的代码.在这里,您可以oldValue在新值可用时访问旧值(已被覆盖)self.name.
这两个willSet和didSet是可选的(我不是在谈论可选的类型!我的意思是你不会被强迫他们写:).
如果您不需要仅运行某些代码before或者after已更改属性,则只需省略它们即可.
let aVerySmartPerson = Person(name: "Walter White")
aVerySmartPerson.name = "Heisenberg"
// > Walter White is going to be renamed as Heisenberg
// > Walter White has been renamed as Heisenberg
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4940 次 |
| 最近记录: |