[英]Property encapsulation with property observer - Swift
我正在尝试使用属性观察器进行属性封装。 请参阅下面的示例代码。 如果userName
为空,则需要将username设置为Unknown 。 我正在willSet
检查此条件,但是很遗憾,它无法将值设置为self.userName = "Unknown"
。
如果我对getter-setter
进行同样的操作,那么可以通过额外的私有参数来实现。 检查以下代码。
与获取集
private var userName : String
var name : String {
get {
return self.userName
}
set {
if newValue.isEmpty {
self.userName = "Unknown"
}
}
}
示例代码-WillSet
class MyClass {
var userName : String {
willSet{
print("Will set called")
if newValue.isEmpty {
print("If condi \(newValue) ..")
self.userName = "Unknown"
}
}
didSet {
print("Did set called")
}
}
init(name : String) {
self.userName = name
}
}
let c = MyClass(name: "Hello")
c.userName = ""
print("var ->", c.userName)
输出:
问:如何使用willSet实现这种封装? 如果我在某个地方误解了,请纠正我。
谢谢
只需在didSet
重置:
class MyClass {
var userName : String {
didSet {
if userName.isEmpty {
self.userName = "Unknown"
}
}
}
init(name : String) {
self.userName = name
}
}
但是请记住,不会从init
调用属性观察器,因此,如果有人let c = MyClass(name: "")
userName
仍然是空字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.