属性观察者机制能让程序在属性被赋值时获得运行代码的机会,用来监视属性的除初始化之外的属性值变化,当属性值发生改变时能够对此作出响应

详细包含两个特殊的回调方法:

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

didSet(old Value):被观察的属性被赋值完毕之后自己主动调用该方法。

观察的范围

除了延迟存储属性之外的全部存储属性(包含实例存储属性或类型存储属性)。

可通过重载方式为继承得到的属性(包含存储属性和计算属性)加入

属性观察者

定义语法格式

[修饰符] var 存储属性名:属性类型[=初始值]{
willSet(newValue){
//属性即将被赋值之前自己主动运行的代码
}didSet(oldValue)
{
//属性被赋值完毕之后自己主动运行的代码
}
}

说明:

willSet:willSet部分可定义一段运行性代码,被观察的属性即将被赋值之前自己主动运行这块代码。

willSet部分能够显式制定一个形參名,该形參代表了该属性将被设置的新值。Swift也能够省略这个形參名。Swift将为该形參提供一个隐式形參名:newValue。

didSet:didSet部分可定义一段运行性代码,被观察的属性被成功赋值之后自己主动运行这块代码。didSet部分能够显式制定一个形參名,该形參代表了该属性将被改动之前的旧值。Swift也能够省略这个形參名,Swift将为该形參提供一个隐式形參名:oldValue。

  class Person {
var age:Int=0
{
willSet{
if(newValue<0 || newValue>200)
{
print("你输入的有误。非人类呀")
}
else{
print("即将成功")
} }
didSet{
print("已完毕,原来的年龄为\(oldValue)") }
}
}
var p=Person()
p.age=1000

Object-C---&gt;Swift之(十一)属性观察者的更多相关文章

  1. Swift—属性观察者-备

    为了监听属性的变化,Swift提供了属性观察者.属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到. 属性观察者主要有以下两个: willSet:观察者在修改之前调用. didSe ...

  2. 《从零开始学Swift》学习笔记(Day 33)——属性观察者

    原创文章,欢迎转载.转载请注明:关东升的博客 为了监听属性的变化,Swift提供了属性观察者.属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到. 属性观察者主要有以下两个: l ...

  3. swift属性观察者机智

    为了让程序能在属性被赋值时获得执行代码的机会.swift提供了属性观察者机智,属性观察者其实就两个特殊的回调方法 willSet:被观察的属性即将被赋值之前自动调用该方法 didSet:被观察的属性被 ...

  4. Swift - 属性观察者(willSet与didSet)

    属性观察者,类似于触发器.用来监视属性的除初始化之外的属性值变化,当属性值发生改变时可以对此作出响应.有如下特点: 1,不仅可以在属性值改变后触发didSet,也可以在属性值改变前触发willSet. ...

  5. swift_属性观察者

    //: Playground - noun: a place where people can play import Cocoa var str = "Hello, playground& ...

  6. OpenStack Object Storage(Swift)概述

    概述 OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一,被称为对象存储,提供了强大的扩展性.冗余和持久性. Swift并不是文件系统或者实时 ...

  7. Swift 学习笔记 (属性)

    属性可以将值与特定的类 结构体 或者枚举联系起来. 存储属性会存储常量或者变量作为实例的一部分.反之计算属性会计算(而不是存储值)值. 计算属性可以由类 结构体 和枚举定义.存储属性只能由类和结构体定 ...

  8. 李洪强iOS开发Swift篇—09_属性

    李洪强iOS开发Swift篇—09_属性 一.类的定义 Swift与Objective-C定义类的区别 Objective-C:一般需要2个文件,1个.h声明文件和1个.m实现文件 Swift:只需要 ...

  9. swift 学习- 11 -- 属性

    // '属性'将值跟特定的类, 结构体或枚举关联, 存储属性常量或变量作为实例的一部分,而计算属性计算(不是存储) 一个值, 计算属性可以用于 类, 结构体, 枚举, 存储属性只能用于 类 和 结构体 ...

随机推荐

  1. redis学习-sds数据类型

    今天开始了redis的学习,本来想直接从源码看起的,不过看到有篇对redis介绍的基础教程 <Redis 设计与实现(第一版)> 于是决定从这个开始入门. 1.数据类型定义 typedef ...

  2. Python学习日记之字典深复制与浅复制

    Python中通过copy模块有两种复制(深复制与浅复制) copy 浅复制 复制时只会复制父对象,而不会复制对象的内部的子对象. deepcopy 深复制 复制对象及其子对象 因此,复制后对原dic ...

  3. Maven对不同的测试环境用不同的参数进行打包

    通过mvn package -P ${env} 加载不同配置文件 1.pom.xml中的配置 filter-dev.properties jdbc.properties

  4. 【Python-2.7】删除空格

    有时我们在编程过程中,需要去除字符串两边的空格,可以用如下函数解决问题: rstrip():去除字符串右边的空格: lstrip():去除字符串左边的空格: strip():去除字符串两边的空格. 示 ...

  5. Angular——路由参数

    基本介绍 在控制中注入$routeParams可以获取传递的参数 区别对比 angular中的路由是指#之后的内容,包括之后的?,而在之前的http地址中我们习惯性的将?放在前面 具体使用 1.形参 ...

  6. Spartan6系列之器件详细介绍、选型参考

    1.      概述 Spartan6系列是一类低成本高容量的FPGA,采用45nm低功耗敷铜技术,能在功耗.性能.成本之间很好地平衡:Spartan6系列内部采用双寄存器.6输入的LUT,还有一系列 ...

  7. Modbus测试工具ModbusPoll与Modbus Slave使用方法

    感谢https://blog.csdn.net/byxdaz/article/details/77979114原创,由于CSDN经常调整,故再编辑收藏,并修改了部分BUG. 一.介绍 Modbus P ...

  8. time模块,补上之前拉下的作业。

    time,时间模块比较重要,但不难学,主要是要学会转换时间格式.计算机的时间都是时间戳.人是看不懂的.写出时间转换的固定格式语句.import time   # 首先就是引入时间模块. time.ti ...

  9. UVA - 514 Rails(栈模拟)

    题目: 给出一个序列,问将1,2,3,4……按从小到大的顺序入栈,能否得到给出的序列. 思路: 用stack模拟就可以了. 当前的cnt如果小于a[i],就将cnt入栈,否则就判断栈顶是不是和a[i] ...

  10. Ztree加载完成默认选中根节点右侧生成表格

    需求:页面加载完成之后,默认选中ztree的根节点,并执行其点击方法,右侧生成表格: 效果:如下图所示: 思路:在节点点击事件clickNode方法中根据节点的部门code查询这个部门下的所有员工,并 ...