[英]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.