美文网首页
Swift 中的KVO

Swift 中的KVO

作者: 绍清_shao | 来源:发表于2019-10-14 08:56 被阅读0次

基本类型的监听 包括String、Int、数组等等

Person为被监听的对象,name被监听的属性

class Person: NSObject {

    @objc dynamic var name: String

    init(name: String) {
        self.name = name
    }

}

KVO是基于KVC(Key-Value Coding)以及动态派发技术实现,所以class要继承NSObject,需要监听属性的对象要标记为@objc dynamic

ViewController为监听者,需要监听Personname的变化

class ViewController: UIViewController {

    var person: Person!
    var observation: NSKeyValueObservation?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        person = Person(name: "name")
        observation = person.observe(\Person.name, options: [.new,.old], changeHandler: { (p, change) in
            if let name = change.oldValue {
                print("旧名字:" + name)
            }
            if let name = change.newValue {
                print("新名字:" + name)
            }
        })
        
    }
    
    @IBAction func tap(_ sender: UIButton) {
        person.name = "shao"
    }

}
// 打印结果
旧名字:name
新名字:shao

Enum类型

需要做个转换

class ViewModel: NSObject {
    
    enum AnEnumType : String {
        case enumA = "A"
        case enumB = "B"
    }
    // 监听类型为
    @objc dynamic private(set) var anEnumRaw : String = ""
    
    var anEnumType : AnEnumType? {
        
        didSet {
            anEnumRaw = anEnumType?.rawValue ?? "none"
        }
        
    }
    
}

参考链接

Smart KeyPaths
Swift KVO - Observing enum properties

相关文章

  • swift-kvo

    swift中kvo的使用

  • swift中KVO和属性观察器

    开篇提醒:OC中的KVO及其KVO的基础知识可参见:深入runtime探究KVO Swift中,原本没有KVO模式...

  • Swift4 - KVO的浅析

    SWIFT4.0中的KVO 在swift4.0 中 KVO 出现了变更,添加了监听回调.变得更加简单易用.同时会自...

  • [Swift Tips 读书笔记]从 Objective-C 到

    KVO 局部 scope 判等 哈希 类簇 调⽤ C 动态库 -- KVO Swift中KVO使用条件 :NSOb...

  • 417,Swift 怎么实现KVO(面试点:基于NSObject

    一、KVO kvo键值观察者 Swift继承NSObject的KVO swift 实现kvo需要两个条件,第一要是...

  • Swift中的KVO

    class People: NSObject { var date = NSDate() var interval...

  • Swift 中的KVO

    基本类型的监听 包括String、Int、数组等等 Person为被监听的对象,name被监听的属性 KVO是基于...

  • Swift中的KVO

    通知对象(观察者oberver)其他对象(被观察者observed)属性的更改 概述:Key-Value Obse...

  • swift中的KVO

    基本类型的监听 包括String、Int、数组等等 Person为被监听的对象,name被监听的属性 KVO是基于...

  • swift中的KVO

    swift中也可以使用KVO,但是有限制的 1.必须继承自NSObject 2.被观察的属性必须用@objc和dy...

网友评论

      本文标题:Swift 中的KVO

      本文链接:https://www.haomeiwen.com/subject/vmwmyctx.html