Swift 在可解码对象上使用DidSet或WillSet

Swift 在可解码对象上使用DidSet或WillSet,swift,swift5,Swift,Swift5,我当前有一个可编码对象,我正在使用它进行初始化: 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?

我当前有一个可编码对象,我正在使用它进行初始化:

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
        }
    }
}

对象初始化时没有任何问题。但是,未调用age变量上的DidSet函数。在处理可解码或可编码对象时,我们是否能够使用这些函数?谢谢你的帮助

正如@Larme在评论中指出的那样,像
didSet
这样的属性观察家在初始值设定项中不被调用,包括用于
Codable
一致性的观察家。如果需要这种行为,请将
didSet
中的代码重构为单独的命名函数,然后在初始值设定项末尾调用该函数

struct MyStruct:Codable
{
...
变量被激活:布尔{
didSet{didSetIsEnabled()}
}
func didSetIsEnabled(){
//不管你过去在迪塞特干什么`
}
init(来自解码器:解码器)抛出
{
延迟{didSetIsEnabled()}
...
}
}

当然,这确实意味着您需要显式地实现
Codable
一致性,而不是依赖编译器来综合它。

didSet
不是在
init
方法上调用的:谢谢!这对我帮助很大!我感谢你的帮助!这是有道理的,我完全错过了没有调用DidSet的init。这解决了我的问题!我很高兴这有帮助。