• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

swift中简单KVC和KVO的使用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

创建完成的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
            }
        }
    }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[swift]NSClassFromString无法获得该类发布时间:2022-07-13
下一篇:
swift之?和!的含义(转)发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap