zoukankan      html  css  js  c++  java
  • swift中简单KVC和KVO的使用

    创建完成的person类

    @objc class Person: NSObject {
        @objc dynamic var name:String?
    
        init(name: String) {
            self.name = name;
    
        }
        
    

     KVC的使用

           var person:Person!
    
           self.person = Person.init(name: "xiaoming")
            print("name:(person.name)")//name:Optional("xiaoming")
            
            // 取值
            var value = self.person.value(forKey: "name") as? String //name:Optional("xiaoming")
            print("name:(value)")//name:Optional("xiaoming")
            
            //使用
            self.person.setValue("xiaohua", forKeyPath: "name")
            print("name:(person.name)")//name:Optional("xiaohua")
            
            //使用字典
            let dict = ["name":"小光"]
            self.person.setValuesForKeys(dict)
            let dictOut = self.person.dictionaryWithValues(forKeys: ["name"])
            print("(dictOut)")//["name": 小光]
    

     KVO的使用

            self.person.name = "xiaoming"
            self.person.addObserver(self, forKeyPath: "name", options: NSKeyValueObservingOptions.new, context: nil)// 监听(KVO的属性必须设置dynamic).addObserver(self, forKeyPath: "userName", options: NSKeyValueObservingOptions.new, context: nil)// 监听(KVO的属性必须设置dynamic)
            let deadline = DispatchTime.now() + 5.0
            DispatchQueue.global().asyncAfter(deadline: deadline) {
                self.person.name = "xiaoxiao"
            }
    
        override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
            if "name" == keyPath {
                
                print("之前的: (String(describing: change?[.oldKey]))")//不知道为什么这里一直是nil
                
                if let newValue = change?[.newKey] {
                    print("最新的: (newValue)")//最新的: xiaoxiao
                }
            }
        }
    
  • 相关阅读:
    C# AtomicInt
    Ubuntu16.04或18.04上安装QQ微信迅雷
    Git强制拉取覆盖本地 Pull force
    ulimit限制打开的文件数量
    centos 7.x设置守护进程的文件数量限制
    Apache Doris通过supervisor进行进程管理
    CentOS7 安装supervisor守护进程管理器
    fdisk 分区
    linux i2c tools
    ubuntu12.04 登录黑屏
  • 原文地址:https://www.cnblogs.com/hualuoshuijia/p/11704733.html
Copyright © 2011-2022 走看看