有人可以帮助我迅速了解正确使用吸气剂和吸气剂的方法。我对它的印象与说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 } }
斯威夫特提供了更结构化的方法来getters和setters比Java。
getters
setters
你可以,但你应该 不会 ,写getter和setter方法就像你在你的代码一样。
相反,(如果您使用stored properties)只需声明可见性为non的属性即可private(例如,internal在我的示例中)。这样,您班级外的呼叫者将可以查看属性并进行更改。
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 } }
对!在Swift中,您可以使用willSet和didSet观察者。
willSet
didSet
您在此处编写要在属性中写入新值 之前 运行的代码。在这里,您可以访问当前值(也将被覆盖),self.name而通过可以使用新值newValue。
self.name
newValue
您在此处编写要在属性中写入新值 后 运行的代码。在中,您可以使用来访问旧值(已被覆盖),oldValue而在中可以使用新值self.name。
oldValue
这两个willSet和didSet是可选的(我 不是 在谈论可选的类型!我的意思是你不会被强迫他们写:)。
如果您不需要只运行某些代码before或after属性已更改,只需忽略它们。
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