发 帖  
原厂入驻New
[问答]

属性观察者的特点

26 didSet willSet
分享
属性观察者,类似于触发器。用来监视属性的除初始化之外的属性值变化,当属性值发生改变时可以对此作出响应。有如下特点:
1,不仅可以在属性值改变后触发didSet,也可以在属性值改变前触发willSet。
2,给属性添加观察者必须要声明清楚属性类型,否则编译器报错。
3,willSet可以带一个newName的参数,没有的话,该参数默认命名为newValue。
4,didSet可以带一个oldName的参数,表示旧的属性,不带的话默认命名为oldValue。
5,属性初始化时,willSet和didSet不会调用。只有在初始化上下文之外,当设置属性值时才会调用。
6,即使是设置的值和原来值相同,willSet和didSet也会被调用

0
2020-11-4 07:10:26   评论 分享淘帖 邀请回答
1个回答
示例如下:*
{      //普通属性      var firstName: String = &quot;&quot;      var lastName: String  = &quot;&quot;      var nickName: String  = &quot;&quot;      //计算属性      var fullName: String      {          get          {              return nickName + &quot; &quot; + firstName + &quot; &quot; + lastName          }      }      //带属性监视器的普通属性      var age: Int = 0      {          //我们需要在age属性变化前做点什么          willSet          {              print ( &quot;Will set an new value /(newValue) to age&quot; )          }          //我们需要在age属性发生变化后,更新一下nickName这个属性          didSet          {              print ( &quot;age filed changed form /(oldValue) to /(age)&quot; )              if age<10              {                  nickName = &quot;Little&quot;              } else              {                  nickName = &quot;Big&quot;              }          }      }      func toString() -> String      {          return &quot;Full Name: /(fullName) &quot; + &quot;, Age: /(age) &quot;      } } var me = People () me.firstName = &quot;Zhang&quot; me.lastName  = &quot;San&quot; me.age = 20   print (me.toString())
2020-11-4 11:49:53 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表