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

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

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

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

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

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

面向对象类型 类型名 {   

    ...

    var 存储属性: 属性数据类型 = 初始化值 {

    willSet(新值) {            //定义willSet观察者。“新值”是传递给willSet观察者的参数,它保存了将要替换原来属性的新值

        ...

    }                    

    didSet(旧值) {     //定义didSet观察者。“旧值”是传递给didSet观察者的参数,它保存了被新属性替换的旧值。

        ...

    }                

    }                

}

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

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

示例代码如下:

class Employee {

    var no: Int = 

    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 = 

    var dept: Department?

} 

struct Department {     

    var no: Int =  {       

    willSet {             //定义no属性的willSet观察者,注意这里没有声明参数,但是我们可以在观察者内部使用newValue

        print("部门编号新值:\(newValue)")

    }

    didSet {          //定义no属性的didSet观察者,注意这里也没有声明参数,但是我们可以在观察者内部使用oldValue

        print("部门编号旧值:\(oldValue)")    ⑫

    }

    }

    var name: String = "RESEARCH"

} 

var emp = Employee()

emp.no = 

emp.name = "Smith"               ⑬ 

var dept = Department()

dept.no =                      ⑭

上述代码运行结果如下:

员工name新值:Smith

员工name旧值:Tony

部门编号新值:30

部门编号旧值:10

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

《从零开始学Swift》学习笔记(Day 33)——属性观察者的更多相关文章

  1. Swift学习笔记十:属性

    1.存储属性       1. 作为特定类或结构实例的一部分,存储属性存储着常量或者变量的值. 存储属性可分为变量存储属性(keywordvar描写叙述)和常量存储属性(keywordlet描写叙述) ...

  2. 关东升的《从零开始学Swift》即将出版

    大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版<从零开始学Swift> <从零开始学Swift>将在< ...

  3. 关东升的《从零开始学Swift》3月9日已经上架

    大家一直期盼的<从零开始学Swift>于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发.全 ...

  4. 【swift学习笔记】二.页面转跳数据回传

    上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...

  5. Swift学习笔记(一)搭配环境以及代码运行成功

    原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...

  6. Flutter学习笔记(33)--GestureDetector手势识别

    如需转载,请注明出处:Flutter学习笔记(33)--GestureDetector手势识别 这篇随笔主要记录的学习内容是GestureDetector手势识别,内容包括识别单击.双击.长按.组件拖 ...

  7. WPF 学习笔记-设置属性使窗口不可改变大小

    原文:WPF 学习笔记-设置属性使窗口不可改变大小 调整Windows下的ResizeMode属性: ResizeMode = NoResize Resize属性是控制Windows是否可以改变大小, ...

  8. Effective STL 学习笔记 32 ~ 33

    Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  9. python之感知器-从零开始学深度学习

    感知器-从零开始学深度学习 未来将是人工智能和大数据的时代,是各行各业使用人工智能在云上处理大数据的时代,深度学习将是新时代的一大利器,在此我将从零开始记录深度学习的学习历程. 我希望在学习过程中做到 ...

  10. 从零开始学Java——个人笔记(持续更新中)

    从零开始学Java 学习流程 第一阶段:建立编程思想 Java概述 变量 运算符 控制结构 数组.排序和查找 面向对象编程(基础) 面向对象编程(中级) 项目&学习以致用 编程之乐 第二阶段: ...

随机推荐

  1. pcap学习

    #include <pcap.h> char errbuf[PCAP_ERRBUF_SIZE]; pcap_t *pcap_open_live(const char *device, in ...

  2. EXTJS4自学手册——报表概述

    Ext画报表所涉及到的组件关系如下: Store:数据容器 Legend:图像说明 Axis:横.纵坐标 Series:报表图像

  3. 【Python 数据分析】pandas模块

    上一节,我们已经安装了numpy,基于numpy,我们继续来看下pandas pandas用于做数据分析与数据挖掘 pandas安装 使用命令 pip install pandas 出现上图表示安装成 ...

  4. 《DirectX 9.0 3D游戏开发编程基础》 第一章 初始化Direct3D 读书笔记

    REF设备 参考光栅设备,他能以软件计算方式完全支持Direct3D Api.借助Ref设备,可以在代码中使用那些不为当前硬件所支持的特性,并对这此特性进行测试. D3DDEVTYPE 在程序代码中, ...

  5. 【设计模式 7】从公司的目前框架和API Gateway,谈谈对外观模式的理解

    我,第一次用到外观模式,应该是3年多以前.那时候是做一个收费系统,在当时的U层和B层之间,加了一层Facade.当时,在一些复杂的业务逻辑处理时,感受到了加入外观层的好处,但对于一些简单的(我指的是, ...

  6. windows服务器下配置memcache最大内存值

    windows服务器下修改memcache配置要求如下: 1.用内网ip的方式提供web应用服务器调用,不允许直接通过外网调用,如将memcache服务放在192.168.1.168的服务器上 2.修 ...

  7. ScrollView嵌套ListView冲突问题的最优解决方式

    项目做多了之后.会发现事实上ScrollView嵌套ListVew或者GridView等非经常常使用,可是你也会发现各种奇怪问题产生.依据个人经验如今列出常见问题以及代码最少最简单的解决方法. 问题一 ...

  8. 图片扩展---基于opencv-python实现

    目标: 将一张长方形图片扩展成一张正方形图片,例如: 200x300x3的一张图片扩展成一张300x300x3的图片,填充部分使用白色. 代码: import cv2 import os imglis ...

  9. PHP获取QQ群成员QQ号码

    .加入某个群 .进入群空间http://qun.qzone.qq.com/group#!/25998059/member 备注:25998059为群号码 .进入群成员列表 .使用浏览,在某个群成员头像 ...

  10. std::copy ( myvector.begin(), myvector.end(), out_it )

    在实际生产环境中,不能进行调试,所以程序通常需要编译一个DEBUG版本来辅助我们找出问题所在,编译这样的DEBUG版本最常用的手段就是在关键处输出我们关心一些变量的值到屏幕. 如果输出的简单的变量值, ...