zoukankan      html  css  js  c++  java
  • Swift:属性观察器

    1、简单介绍

    属性观察器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性观察器,甚至新的值和现在的值相同的时候也不例外。

    可以为除了延迟存储属性之外的其他存储属性添加属性观察器,也可以通过重载属性的方式为继承的属性(包括存储属性和计算属性)添加属性观察器。

    注意:

    不需要为无法重载的计算属性添加属性观察器,因为可以通过 setter 直接监控和响应值的变化。

    2、监测方式

    可以为属性添加如下的一个或全部观察器:

    • willSet在设置新的值之前调用
    • didSet在新的值被设置之后立即调用

    分析:

    willset观察器会将新的属性值作为固定参数传入,在willSet的实现代码中可以为这个参数指定一个名称,如果不指定则参数仍然可用,这时使用默认名称

    newValue表示。类似地,didSet观察器会将旧的属性值作为参数传入,可以为该参数命名或者使用默认参数名oldValue。

    注意:

    willSet和didSet观察器在属性初始化过程中不会被调用,它们只会当属性的值在初始化之外的地方被设置时被调用。

    3、实现例子:

    class Student{
        var score:Int = 0{
            willSet{
               print("About to set score to (newValue)")
            }
            didSet{
                if score > oldValue  {
                    print("这次分数进步了 (score - oldValue) scores")
                }
            }
        }
    }
    let student = Student()
    student.score = 80
    student.score = 90
    student.score = 100

    打印结果:

    About to set score to 80
    进步了 80 scores
    About to set score to 90
    进步了 10 scores
    About to set score to 100
    进步了 10 scores
  • 相关阅读:
    Centos配置Apache phpadmin环境
    Linux添加FTP用户并设置权限
    Java中的过滤器
    【eclipse】注释模版
    [ci db操作]
    给vmware的Linux虚拟机添加硬盘
    基于LVDS/M-LVDS的数据通信
    如何找回丢失的硬盘分区表?
    vc++怎么可以直接刷掉MBR?搞笑的吧
    EFI、UEFI、MBR、GPT的区别
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/6241628.html
Copyright © 2011-2022 走看看