每天学一点Swift----面向对象上(六)

43 篇文章 0 订阅
42 篇文章 0 订阅

.观察者属性 

  1. 为了让程序能在属性被赋值时获得执行代码的机会,Swift提供了属性观察者机制,*******属性观察者其实就是两个特殊的回调方法:

  willSet(newValue)----被观察的属性即将被赋值之前自动调用该方法。

  didSet(oldValue)----被观察的属性被赋值完成之后自动调用该方法。

  

  2. 只要程序对非延迟存储的存储属性赋值----即使所赋的值与原有的值相等,属性观察者也能监听到。

  

  3. 属性观察者可以监听如下属性的改变:

  1)除了延迟存储属性之外的所有存储属性(包括实例存储属性和类型存储属性)

  2)可通过重载方式为继承得到的属性(包括存储属性和计算属性)添加属性观察者

  

  4. 不要为没有重载的、普通的计算属性添加属性观察者----因为没有意义。当程序对计算属性赋值时,计算属性的setter方法已经得到了执行,程序在setter方法中想做什么都可以。

  

  5. 定义属性观察者的语法:

  [修饰符]var存储属性名 属性类型 [=初始值]{

  willSet(newValue){

  //属性即将被赋值之前自动执行的代码

  }

  didSet(oldValue){

  //属性被赋值之后自动执行的代码

  }

  }

  

  6. 定义属性观察者的代码就是在存储属性的后面添加一对花括号,在花括号中包好willSetdidSet两个部分。----这两部分都可以省略形参,Swift将会为它们各自提供一个隐式的形参

  

  7. 举个栗子:

  class Person

  {

  //定义存储属性

  var name : String = ""{

  

  willSet{

  //执行合理性校验,要求用户名必须在6--20位之间

  if(countElements(newValue) < 6) || (countElements(newValue) > 20)

  {

  print("输入的人名不合格")

  }

  else

  {

  print("人名设置符合要求")

  }

  }

  didSet{

  print("人名设置完成,被修改的原名为:\(oldValue)")

  }

  

  var age : Int = 0{

  willSet{

  if newValue > 100 || newValue < 0

  {

  print("设置的年龄不合格")

  }

  else

  {

  print("年龄设置符合要求")

  }

  }

  didSet{

  print("年龄设置完成,被修改的年龄为:\(oldValue)")

  }

  }

  }

  

  上面的程序中分别为nameage设置了属性观察者,当程序改变name属性,或者age属性时,属性观察者就会发挥作用。


上一篇:每天学一点Swift----面向对象上(五)

下一篇:每天学一点Swift----面向对象上(七)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值