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