在init中分配属性时,属性观察器不起作用

问题描述 投票:0回答:1

我对这个问题感到惊讶,我已经检查了。构造函数被调用,并且开始时间的值也得到了更新,但从未调用过,它确实设置了闭包。

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   ?? ""



    }
}
ios swift foundation observers
1个回答
0
投票

仅在初始化对象后才调用属性观察器,这意味着init中的任何分配都不会执行willGetdidGetdidSetwillSet中的代码。可以将您的分配包装在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块。

© www.soinside.com 2019 - 2024. All rights reserved.