zoukankan      html  css  js  c++  java
  • 《从零开始学Swift》学习笔记(Day 33)——属性观察者

    原创文章,欢迎转载。转载请注明:关东升的博客 

    为了监听属性的变化,Swift提供了属性观察者。属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到。

    属性观察者主要有以下两个:

    l willSet:观察者在修改之前调用。

    l didSet:观察者在修改之后立刻调用。

    属性观察者的语法格式如下:

    面向对象类型 类型名 {   
    
        ...
    
        var 存储属性: 属性数据类型 = 初始化值 {
    
        willSet(新值) {            //定义willSet观察者。“新值”是传递给willSet观察者的参数,它保存了将要替换原来属性的新值
    
            ...
    
        }                    
    
        didSet(旧值) {     //定义didSet观察者。“旧值”是传递给didSet观察者的参数,它保存了被新属性替换的旧值。
    
            ...
    
        }                
    
        }                
    
    }

    属性观察者的语法格式比计算属性要混乱。

    属性观察者可以在类和结构体中使用,不能在枚举中使用。

    示例代码如下:

    class Employee {
    
        var no: Int = 0
    
        var name: String = "Tony" {  
    
        willSet(newNameValue) {   //定义name属性的willSet观察者,newNameValue是由我们分配的传递新值的参数名
    
            print("员工name新值:(newNameValue)")  
    
        }
    
        didSet(oldNameValue) {    //定义name属性的didSet观察者,oldNameValue是由我们分配的传递旧值的参数名
    
            print("员工name旧值:(oldNameValue)")
    
        }
    
        }
    
        var job: String?
    
        var salary: Double = 0
    
        var dept: Department?
    
    } 
    
    struct Department {     
    
        var no: Int = 10 {       
    
        willSet {             //定义no属性的willSet观察者,注意这里没有声明参数,但是我们可以在观察者内部使用newValue
    
            print("部门编号新值:(newValue)")
    
        }
    
        didSet {          //定义no属性的didSet观察者,注意这里也没有声明参数,但是我们可以在观察者内部使用oldValue
    
            print("部门编号旧值:(oldValue)")    ⑫
    
        }
    
        }
    
        var name: String = "RESEARCH"
    
    } 
    
    var emp = Employee()
    
    emp.no = 100
    
    emp.name = "Smith"var dept = Department()
    
    dept.no = 30

    上述代码运行结果如下:

    员工name新值:Smith

    员工name旧值:Tony

    部门编号新值:30

    部门编号旧值:10 

    欢迎关注关东升新浪微博@tony_关东升。
    关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
                              ​
    更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
    智捷课堂论坛网站:http://51work6.com/forum.php

     

  • 相关阅读:
    C#高级编程第11版
    C#特性
    设计模式 单一职责原则
    设计模式 依赖倒置原则
    C# 预处理指令
    毕业设计 python opencv实现车牌识别 矩形矫正
    毕业设计 python opencv实现车牌识别 颜色判断
    毕业设计 python opencv实现车牌识别 界面
    南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 I
    南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 G
  • 原文地址:https://www.cnblogs.com/iOS-Blog/p/4949238.html
Copyright © 2011-2022 走看看