Ios 在init中指定属性时,属性观察器不工作

Ios 在init中指定属性时,属性观察器不工作,ios,swift,foundation,observers,Ios,Swift,Foundation,Observers,我很惊讶这个问题,我有检查。构造函数被调用,开始时间的值也被更新,但它从未被调用过 class DesignatedLevels{ var _startTime:AppTime? var _endTime:AppTime? var startTime:String? { didSet{ _startTime = AppTime(time: self.startTime!) } } var en

我很惊讶这个问题,我有检查。构造函数被调用,开始时间的值也被更新,但它从未被调用过

class DesignatedLevels{
    var _startTime:AppTime?
    var _endTime:AppTime?
    var startTime:String?
    {
        didSet{
            _startTime = AppTime(time: self.startTime!)
        }
    }
    var endTime:String?
    {
        didSet{
            _endTime = AppTime(time: self.endTime!)
        }
    }



    init(dataJS:[String:Any])
    {
        id = dataJS["id"] as? String
        name = dataJS["name"] as? String
        userName = dataJS["userName"] as? String
        startTime = dataJS["startTime"] as? String ?? ""
        endTime = dataJS["endTime"] as? String   ?? ""



    }
}

属性观察器仅在对象初始化后调用,这意味着
init
中的任何赋值都不会执行
willGet
didGet
didSet
willSet
中的代码。可以将您的工作分配包装在
defer
块中,该块将在
init
退出后立即执行。例如:

    init(dataJS:[String:Any])
    {
        defer {
            id = dataJS["id"] as? String
            name = dataJS["name"] as? String
            userName = dataJS["userName"] as? String
            startTime = dataJS["startTime"] as? String ?? ""
            endTime = dataJS["endTime"] as? String   ?? ""
        }
    }
将导致属性观察器执行,因为
defer
块在对象被
init
ed之后执行