属性观察者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 = 0{
        //我们需要在age属性变化前做点什么
        willSet{
            println("Will set an new value \(newValue) to age")
        }
        //我们需要在age属性发生变化后,更新一下nickName这个属性
        didSet{
            println("age filed changed form \(oldValue) to \(age)")
            if age<10{
                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 = 20
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
*/
时间: 2024-08-02 05:57:37

属性观察者willSet与didSet的相关文章

存储型变量监视器和属性监视器willset与didset

可以用willset和didset监视器来声明一个存储型变量或属性. var num= 0 { willSet(setter name) { //do something here   } didSet(setter name) { //do something here  } } 当变量或属性的值被改变时,willset和didset监视器提供了一个监视方法(适当的回应). 监视器在变量或属性第一次初始化时不会被运行,只有在值被外部改变时才会被运行. willset监视器只有在变量或属性值被改

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

属性观察者,类似于触发器.用来监视属性的除初始化之外的属性值变化,当属性值发生改变时可以对此作出响应.有如下特点: 1,不仅可以在属性值改变后触发didSet,也可以在属性值改变前触发willSet. 2,给属性添加观察者必须要声明清楚属性类型,否则编译器报错. 3,willSet可以带一个newName的参数,没有的话,该参数默认命名为newValue. 4,didSet可以带一个oldName的参数,表示旧的属性,不带的话默认命名为oldValue. 5,属性初始化时,willSet和did

属性观察器willSet与didSet

willSet与didSet是swift特有的,就是监听属性值的变化,但有一个小注意点. willSet与didSet调用时机:对象创建后的第一次赋值时开始调用.也就是说,初始化时(包含重载的init或重写的init)不会调用. 1 var name:String?{ 2 willSet{ 3 print("新值:\(newValue):旧值:\(name)") 4 } 5 didSet{ 6 print("旧值:\(oldValue):name = \(name)"

属性观察者(监听属性的变化)

// 属性观察者, 用于监听属性变化, 在属性变化的时候调用 class Person { var name: String = "" { // 也可以写成willSet{}, 系统默认会传入一个名为newValue的参数 willSet(newValue) { print("name这个属性将被修改了, \(newValue)") } // 也可以写成didSet{} didSet(newValue) { print("name这个属性已经被修改了, \

Object-C---&amp;gt;Swift之(十一)属性观察者

属性观察者机制能让程序在属性被赋值时获得运行代码的机会,用来监视属性的除初始化之外的属性值变化,当属性值发生改变时能够对此作出响应 详细包含两个特殊的回调方法: willSet(newValue):被观察的属性即将被赋值之前自己主动调用方法. didSet(old Value):被观察的属性被赋值完毕之后自己主动调用该方法. 观察的范围 除了延迟存储属性之外的全部存储属性(包含实例存储属性或类型存储属性). 可通过重载方式为继承得到的属性(包含存储属性和计算属性)加入 属性观察者 定义语法格式

2008Swift 2.0学习笔记(Day 33)——属性观察者

原创文章,欢迎转载.转载请注明:关东升的博客 为了监听属性的变化,Swift提供了属性观察者.属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到. 属性观察者主要有以下两个: l willSet:观察者在修改之前调用. l didSet:观察者在修改之后立刻调用. 属性观察者的语法格式如下: 面向对象类型 类型名 { ... var 存储属性: 属性数据类型 = 初始化值 { willSet(新值) { //定义willSet观察者.“新值”是传递给willSet观察者的参数

swift_属性观察者

//: Playground - noun: a place where people can play import Cocoa var str = "Hello, playground" 定义Class类 测试类 swift代码: class Test{ //定义一个变量属性 var name :String? = "Tom" { // willSet{ // print("name_value-changeAfter:\(newValue)"

Swift属性观察者

为了监听属性的变化,Swift提供了属性观察者,属性观察者能够监听存储属性的变化,即便变化前后的值不同,它们也能监听到,但它们不能延迟存储属性和常量存储属性的变化 Swift中的属性观察者主要有以下两种: 1.willSet:观察者在修改之前调用: 2.didSet:观察者在修改之后调用: 属性观察者的语法如下: 面向对象类型 类型名 { var 存储属性 : 属性数据类型 = 初始值 { willSet(新值){ } didSet(旧值){ } } } 示例 class Employee{ v

Swift中的willSet与didSet

Swift中的willSet与didSet 周银辉 在Swift语言中用了willSet和didSet这两个特性来监视属性的除初始化之外的属性值变化 无需说太多,看看下面的代码你就能很快明白的 import Foundation class People : NSObject { //普通属性 var firstName:String = "" var lastName:String = "" var nickName:String = "" /