簡體   English   中英

在可解碼 object 上使用 DidSet 或 WillSet

[英]using DidSet or WillSet on decodable object

我目前有一個 Codable object,我正在使用它進行初始化:

let decoder = JSONDecoder()
let objTest: TestOBJClass = try! decoder.decode(TestOBJClass.self, from: data)

TestOBJClass:

public class TestOBJClass: Codable {
    var name: String
    var lastname: String?
    var age: Int? {
        DidSet {
            //Do Something
        }
    }
}

object 初始化沒有問題。 但是,年齡變量上的 DidSet function 沒有被調用。 在使用 Decodable 或 Encodable 對象時,我們是否能夠使用這些函數? 謝謝您的幫助!

正如@Larme 在評論中指出的那樣,像didSet這樣的屬性觀察器不會在初始化程序中被調用,包括Codable一致性。 如果您想要這種行為,請將didSet中的代碼重構為單獨的名為 function 的代碼,然后在初始化程序結束時調用 function。

struct MyStruct: Codable
{
    ...
    var isEnabled: Bool {
        didSet { didSetIsEnabled() }
    }

    func didSetIsEnabled() {
        // Whatever you used to do in `didSet`
    }

    init(from decoder: Decoder) throws
    {
        defer { didSetIsEnabled() }
        ...
    }
}

當然,這確實意味着您需要顯式地實現Codable一致性,而不是依賴編譯器來合成它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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