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

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

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. datagrid上面的查询按钮设置了,但是分页工具栏不显示

    原因:查询的linkbutton没有放在toolbar里. <script type="text/javascript"> $(function(){ $('#dg') ...

  2. python+opencv+Face++实现人脸识别比对

    2018-03-2010:16:55 代码仓库--GitHub--https://github.com/az666/python_opencv_face- 依旧是先来图片 下面这张是我进行识别的效果( ...

  3. 关于c++11中static类对象构造函数线程安全的验证

    在c++11中,static静态类对象在执行构造函数进行初始化的过程是线程安全的,有了这个特征,我们可以自己动手轻松的实现单例类,关于如何实现线程安全的单例类,请查看c++:自己动手实现线程安全的c+ ...

  4. Exceptions & Errors - 异常与错误

    来源于 Ry’s Objective-C Tutorial - RyPress 一个学习Objective-C基础知识的网站. 个人觉得很棒,所以决定抽时间把章节翻译一下. 本人的英语水平有限,有让大 ...

  5. RocketMQ学习笔记(16)----RocketMQ搭建双主双从(异步复制)集群

    1. 修改RocketMQ默认启动端口 由于只有两台机器,部署双主双从需要四个节点,所以只能修改rocketmq的默认启动端口,从官网下载rocketmq的source文件,解压后使用idea打开,全 ...

  6. 01Hypertext Preprocessor

    Hypertext Preprocessor PHP即Hypertext Preprocessor是一种被广泛使用的开放源代码多用途动态交互性站点的强有力的服务器端脚本语言尤其适用于 Web开发人员可 ...

  7. Linux的net.ipv4.tcp_timestamps参数

    Q1 今天发生了一个奇怪的现象,在家里始终打开公司的网站打开不了,我就齐了怪了,然后我就各种测试,从ping到dig域名,然后再curl,都是没有问题的,但是就是打不开,最好没有办法只能抓包了,从抓包 ...

  8. C语言输入一行整数(OJ输入格式)

    就是说输入一行用空格隔开的函数,可是它没说用回车符结束,所以一定要用EOF了 第一种方法: ; char ch; do { scanf("%ld",&a[++t]); } ...

  9. 使用 MyBatis 对表执行 CRUD 操作

    说明: 1.CRUD: C --  create    R -- read   U -- update  D -- delete 2.Mybatis 的 SQL 核心配置文件中 SQL 语句的参数的传 ...

  10. MFC 多行文本显示心得

    最近在利用MFC做端口扫描器实验,其中涉及CString.char.int等之间的转换.文本框的多行显示问题.总是显示底层最新结果等问题,下面写一些我总结的相关方法. 一.CString 转  cha ...