首页 > 代码库 > swift学习第十四天:属性监听器

swift学习第十四天:属性监听器

监听属性的改变
  • 在OC中我们可以重写set方法来监听属性的改变
  • Swift中可以通过属性观察者来监听和响应属性值的变化
  • 通常是监听存储属性和类属性的改变.(对于计算属性,我们不需要定义属性观察者,因为我们可以在计算属性的setter中直接观察并响应这种值的变化)
  • 我们通过设置以下观察方法来定义观察者
    • willSet:在属性值被存储之前设置。此时新属性值作为一个常量参数被传入。该参数名默认为newValue,我们可以自己定义该参数名
    • didSet:在新属性值被存储后立即调用。与willSet相同,此时传入的是属性的旧值,默认参数名为oldValue
    • willSet与didSet只有在属性第一次被设置时才会调用,在初始化时,不会去调用这些监听方法
  • 监听的方式如下:
    • 监听age和name的变化
class Person : NSObject {    var name : String? {        // 可以给newValue自定义名称        willSet (new){ // 属性即将改变,还未改变时会调用的方法            // 在该方法中有一个默认的系统属性newValue,用于存储新值            print(name)            print(new)        }        // 可以给oldValue自定义名称        didSet (old) { // 属性值已经改变了,会调用的方法            // 在该方法中有一个默认的系统属性oldValue,用于存储旧值            print(name)            print(old)        }    }    var age : Int = 0    var height : Double = 0.0}let p : Person = Person()// 在赋值时,监听该属性的改变// 在OC中是通过重写set方法// 在swift中,可以给属性添加监听器p.name = "why"//p.name = "yz"

import UIKitclass Person: NSObject {    // 属性监听器    var name : String? {        // 属性即将改变时进行监听        willSet {            print(name)            print(newValue)        }                // 属性已经改变时进行监听        didSet {            print(name)            print(oldValue)        }    }}let p = Person()p.name = "why"p.name = "yz"

 

swift学习第十四天:属性监听器