gpt4 book ai didi

ios - 在 init 中分配属性时属性观察器不工作

转载 作者:行者123 更新时间:2023-11-28 23:23:35 24 4
gpt4 key购买 nike

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

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 中的任何赋值都不会执行 willGetdidGetdidSetwillSet。可以将您的分配包装在 defer block 中,该 block 将在 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 block 在对象被 inited 之后执行。

关于ios - 在 init 中分配属性时属性观察器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59229502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com