簡體   English   中英

使用屬性觀察器進行屬性封裝-Swift

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM