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