【问题标题】:Property observers not working when assigning properties in init在 init 中分配属性时,属性观察器不起作用
【发布时间】:2020-04-01 09:54:28
【问题描述】:

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

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】:

    属性观察器仅在对象初始化后被调用,这意味着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 块在对象被inited 之后执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      • 2014-11-03
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多