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之后执行