Swift属性观察者

为了监听属性的变化,Swift提供了属性观察者,属性观察者能够监听存储属性的变化,即便变化前后的值不同,它们也能监听到,但它们不能延迟存储属性和常量存储属性的变化

Swift中的属性观察者主要有以下两种:

1、willSet:观察者在修改之前调用;

2、didSet:观察者在修改之后调用;

属性观察者的语法如下:

面向对象类型 类型名 {

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

willSet(新值){

}

didSet(旧值){

}

}

}

示例

class Employee{

var no:Int = 0

var name:String {

willSet(NewNameValue){

println("员工name的新值:\(NewNameValue)")

}

didSet(oldNameValue){

println("员工name的旧值:\(oldNameValue)")

}

}

var job:String?

var  salary:Double=0

var depet:Department?

}

struct Department {

var no : Int = 10 {

willSet{

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

}

}

didSet{

println("部门编号旧值\(oldValue)")

}

}

时间: 2024-07-29 15:25:40

Swift属性观察者的相关文章

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

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

Object-C--->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)"

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

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

swift 属性和方法

属性和常量 如果创建了一个结构体的实例并赋值给一个常量,则无法修改实例的任何属性: let rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4) rangeOfFourItems.firstValue = 6 当值类型的实例被声明为常量的时候,它的所有属性也就成了常量 当引用类型的实例赋给一个常量后,仍然可以修改实例的变量属性. 延迟属性 属性声明前使用@lazy来标示一个延迟存储属性. 延迟存储属性是指当第一次被调用的时候才

Swift属性

属性将值跟特定的类.结构或枚举关联.存储属性存储常量或变量作为实例的一部分,计算属性计算(而不是存储)一个值.计算属性可以用于类.结构体和枚举里,存储属性只能用于类和结构体. 存储属性和计算属性通常用于特定类型的实例,但是,属性也可以直接用于类型本身,这种属性称为类型属性.另外,还可以定义属性监视器来监控属性值的变化,以此来触发一个自定义的操作.属性监视器可以添加到自己写的存储属性上,也可以添加到从父类继承的属性上. 存储属性 简单来说,一个存储属性就是存储在特定类或结构体的实例里的一个常量或变

22.swift属性

/* 存储属性 其实Swift中的存储属性就是以前学习OC中的普通属性, 在结构体或者类中定义的属性, 默认就是存储属性 */ struct Person { var name: String var age: Int } var p:Person = Person(name: "lnj", age: 30) p.name = "hm" p.age = 50 /* 常量存储属性 常量存储属性只能在定义时或构造时修改, 构造好一个对象之后不能对常量存储属性进行修改 *

OC、Swift 属性、成员变量

一.@property 使用@property 修饰的变量,编译器会自动生成带下划线的同名属性和与之对应的 get set 方法.通过 . 的方式访问属性其实是访问与之对应的 get set 方法,所以在 get set 中不可以使用self.属性 的形式,否则会陷入死循环.当同时重写两个方法中是需在实现文件中添加 @synthesize property = _property; 在类中,可直接访问其对应的属性. // a.h @property (nonautomic,copy) NSStr