属性观察者willSet与didSet
在Swift中使用willSet和didSet这两个特性来监视属性的除初始化之外的属性值变化。
willSet里面是新值,即属性即将要变为的值;didSet里面是旧值,即属性变化之前的值。
import Foundation
class People : NSObject
{
//普通属性
var firstName:String = ""
var lastName:String = ""
var nickName:String = ""
//计算属性
var fullName:String{
get{
return nickName + " " + firstName + " " + lastName
}
}
//带属性监视器的普通属性
var age:Int = {
//我们需要在age属性变化前做点什么
willSet{
println("Will set an new value \(newValue) to age")
}
//我们需要在age属性发生变化后,更新一下nickName这个属性
didSet{
println("age filed changed form \(oldValue) to \(age)")
if age<{
nickName = "Little"
}else{
nickName = "Big"
}
}
}
func toString() -> String{
return "Full Name: \(fullName) " + ", Age: \(age) "
} } var me = People()
me.firstName = "Zhang"
me.lastName = "San"
me.age =
println(me.toString()) /*程序输出
Will set an new value 20 to age
age filed changed form 0 to 20
Full Name: Big Zhang San , Age: 20
*/
属性观察者willSet与didSet的更多相关文章
- Swift - 属性观察者(willSet与didSet)
属性观察者,类似于触发器.用来监视属性的除初始化之外的属性值变化,当属性值发生改变时可以对此作出响应.有如下特点: 1,不仅可以在属性值改变后触发didSet,也可以在属性值改变前触发willSet. ...
- swift 存储属性和计算属性 set{}和get{} didSet{}和willSet{}
首先我们看一段代码: var A:Int = 0 var B:Int = 0 var C:Int { get { return 1 } set { print("Recived new va ...
- 属性观察器willSet与didSet
willSet与didSet是swift特有的,就是监听属性值的变化,但有一个小注意点. willSet与didSet调用时机:对象创建后的第一次赋值时开始调用.也就是说,初始化时(包含重载的init ...
- swift_属性观察者
//: Playground - noun: a place where people can play import Cocoa var str = "Hello, playground& ...
- Swift—属性观察者-备
为了监听属性的变化,Swift提供了属性观察者.属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到. 属性观察者主要有以下两个: willSet:观察者在修改之前调用. didSe ...
- 《从零开始学Swift》学习笔记(Day 33)——属性观察者
原创文章,欢迎转载.转载请注明:关东升的博客 为了监听属性的变化,Swift提供了属性观察者.属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到. 属性观察者主要有以下两个: l ...
- Object-C--->Swift之(十一)属性观察者
属性观察者机制能让程序在属性被赋值时获得运行代码的机会,用来监视属性的除初始化之外的属性值变化,当属性值发生改变时能够对此作出响应 详细包含两个特殊的回调方法: willSet(newValue):被 ...
- swift属性观察者机智
为了让程序能在属性被赋值时获得执行代码的机会.swift提供了属性观察者机智,属性观察者其实就两个特殊的回调方法 willSet:被观察的属性即将被赋值之前自动调用该方法 didSet:被观察的属性被 ...
- Swift中的willSet与didSet
Swift中的willSet与didSet 周银辉 在Swift语言中用了willSet和didSet这两个特性来监视属性的除初始化之外的属性值变化 无需说太多,看看下面的代码你就能很快明白的 imp ...
随机推荐
- Jquery的$命名冲突
在Jquery中,$是JQuery的别名,所有使用$的地方也都可以使用JQuery来替换,如$('#msg')等同于JQuery('#msg')的写法.然而,当我们引入多个js库后,在另外一个js库中 ...
- eclipse中不能找到dubbo.xsd解决方法
使用dubbo时遇到问题: org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'htt ...
- linux crt
1.仿真 终端选linux ANSI颜色[有颜色了] 使用颜色方案[颜色加深了] 2.外观 选传统的 ,utf-8 就不会乱码了
- 手工配置tomcat 解决一闪而过~
双击tomcat 目录下的bin目录下的startup.bat 如果看到Server startup in **** ms 显示在屏幕上证明你的配置都成功了 如果一闪而过,说明出错了.请在dos进入上 ...
- Java序列化接口的作用总结
一个对象有对应的一些属性,把这个对象保存在硬盘上的过程叫做”持久化”. 把堆内存中的对象的生命周期延长,存入硬盘,做持久化操作.当下次再需要这个对象的时候,我们不用new了,直接从硬盘中读取就可以了. ...
- HTTP层 —— 响应
1.创建响应 字符串&数组 所有路由和控制器都会返回一个被发送到用户浏览器的响应,Laravel 提供了多种不同的方式来返回响应,最基本的响应就是从路由或控制器返回一个简单的字符串,框架会将这 ...
- oracle两种导出导入方式,即imp与impdp之比较
尽管使用了很多次impexp及impdpexpdp但是使用起来还是会遇到很多问题,现总结如下: 应用:将一个用户的所有表结构及索引,触发器,过程,函数等导入到另一用户里 imp/exp 导出用户表结构 ...
- c# xml 解析取值
//字符串 string result = "<?xml version=\"1.0\" encoding=\"utf-8\"?>< ...
- 再跟SQL谈一谈--高级篇(一)
1.SELECT KEYWORD ①TOP ②LIKE ③IN ④BETWEEN...AND ⑤ALIAS 2.SELECT JOIN ①JOIN | INNER JOIN ②LEFT JOIN ③R ...
- CStdioFile 写文件
前言: 介绍如何使用 CStdioFile 类去写文件. 完整工程代码,点我下载(请注意工程里面需要包含的 <locale.h>头文件 ) 示例: /// My Add // 获取当前路径 ...