首页 > 代码库 > 存储型变量监视器和属性监视器willset与didset

存储型变量监视器和属性监视器willset与didset

可以用willset和didset监视器来声明一个存储型变量或属性。

var num= 0 {
  willSet(setter name) {

    //do something here
  
    }
  didSet(setter name) {

       //do something here
    }
}    

当变量或属性的值被改变时,willset和didset监视器提供了一个监视方法(适当的回应)。 监视器在变量或属性第一次初始化时不会被运行,只有在值被外部改变时才会被运行。

willset监视器只有在变量或属性值被改变之前运行。新的值作为一个常量经过willset监视器,因此不可以在 willset语句中改变它。didset监视器在变量或属性值被改变后立即运行。和willset监视器相反,为了以防止你仍然 需要获得旧的数据,旧变量值或者属性会经过didset监视器。这意味着,如果你在变量或属性自身的didiset监视器语句中设置了一个值,你设置的新值会取代刚刚在willset监视器中经过的那个值。

在willset和didset语句中,setter名和圆括号的语句是可选的。如果你写了一个setter名,它就会作为willset和didset的参数被使用。如果你不写setter名, willset监视器初始名为newvalue,didset监视器初始名为oldvalue。

当你提供一个willset语句时,didset语句是可选的。同样的,在你提供了一个didset语句时,willset语句是可选的。

存储型变量监视器和属性监视器willset与didset