12.3 属性监视器

配置参数

  • 特色:瑞鸽TL-S900HD 监视器 9寸 SDI HDMI 5D2 3 摄像导演型监视器

查看完整参数>>

配置参数

  • 特色:视瑞特ST-689AH热销7寸摄影监视器5D2单反相机监视器摇臂监视器

查看完整参数>>

属性监视器

属性监视器监视并且响应属性值的变化。即使新的值与属性的当前值相同,每次属性值被设置时都会调用属性监器。

你可以为任何定义的存储属性添加属性监视器,除了延迟存储属性。同时你也可以在子类中重写来为任何继承属性(无论存储属性或计算属性)添加监视器。属性重写在
Overriding 这一章节中有描述。

注意:

你不需要为无覆盖的计算属性定义属性监视器,因为你可以直接在他们的
setter 函数中监视并且处理变化。

你可以为属性添加如下一种或两种监视器:

willSet 在值被存储的时候被调用

didSet 在新的值被存储的时候立刻调用

如果实现一个 willSet
监视器,它以敞亮参数的形式传递新的属性。你可以为这个参数指定一个名称作为
willSet
实现的一部分。如果不指明参数名称并且在实现中不写圆括号的话,那么参数将仍然可以使用默认参数名
newValue 来访问。

类似地,如果实现 didSet
监视器,它将传递一个包含旧属性值的常量参数。你可以为该参数命名,也可以使用默认参数名
oldValue。

注意:

willSet 和 didSet
监视器在属性首次初始化的时候不会被调用。仅当在初始化外部环境中属性值被设置的时候才会调用。

如下是一个使用 willSet 和 didSet 的示例。例子中定义了一个新的类称为
StepCounter,用来记录一个人的行走步数。这个类可以使用计数器或者其他计步器作为数据输入来记录人们在日常生活中的锻炼:

<此处添加代码2.10.3 – 1>

StepCounter 类定义了一个 int 类型的属性 totalSteps。这是一个拥有 willSet
和 didSet 监视器的存储属性。

任何时候当 totalSteps 被赋予新值时,willSet 和 didSet
监视器豆浆被调用。即使新值和旧的值相同时也同样。

例子中 willSet 监视器使用了一个名为 newTotalSteps
的自定义参数来表示新值。在这个例子中,它仅仅是打印出了将要被设置的值。

在 totalSteps 值更新之后 didSet
监视器被调用。它对比了旧的和新的值。如果总步数值有增加,则打印一条信息来显示新增了多少步数。didSet
监视器并没有为旧的值提供自定义的参数名,仅仅使用了默认的参数名
oldValue。

注意:

如果你在一个属性自己的 didSet
监视器中给它赋值,那么这个值会替换掉之前设置的值。

相关文章