美文网首页
8.25 KVC & KVO 观察者

8.25 KVC & KVO 观察者

作者: jayck | 来源:发表于2016-09-07 21:01 被阅读4次

创建2个类,动物和食物

import UIKit

class Animal: NSObject {
    var name: String!
    var age: Int!
    var weight: Double!
    
    var food: Food!
}

import UIKit

class Food: NSObject {
    var name: String!
}

import UIKit

class ViewController: UIViewController {
    let ani = Animal()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        ani.name = "Zhangsan"
        
        print(ani.name)
        
        //KVC - Key value coding
        //keyPath
        //无视所有访问权限控制
               //Swift中,如果变量前面写了private,就不能用 
        ani.setValue("Lisi", forKey: "name")
        print(ani.name)
        
        print(ani.valueForKey("name"))
        
        let food = Food()
        food.name = "骨头"
        
        ani.food = food
        
        print(ani.food.name)
        
        ani.setValue("耗子", forKeyPath: "food.name")
        print(ani.food.name)
        
        print(ani.valueForKeyPath("food.name"))
        
        //KVO -     key-value observing
        //self观察ani的name属性的变化
        ani.addObserver(self, forKeyPath: "name", options: [.New], context: nil)
        
        //会通知观察者
        ani.setValue("Dog", forKeyPath: "name")
//        ani.name = "Cat"
        ani.setValue("Cat", forKey: "name")
        
        ani.removeObserver(self, forKeyPath: "name")
        
        //contentOffset/contentSize/contentInset
    }
    
    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
        print(keyPath)
        print(object)
        print(change)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

运行结果如下:

Paste_Image.png

Optional( )中可以看到哪些值发生了变化。

相关文章

  • 8.25 KVC & KVO 观察者

    创建2个类,动物和食物 运行结果如下: Optional( )中可以看到哪些值发生了变化。

  • 谈KVC、KVO(重点观察者模式)机制编程

    谈KVC、KVO(重点观察者模式)机制编程 谈KVC、KVO(重点观察者模式)机制编程

  • KVO与KVC

    KVO与KVC的区别: KVO是指键-值-观察者模式,键值监听,监听一个对象属性值的改变,KVO是基于KVC的。K...

  • KVO与KVC

    KVO与KVC是观察者模式在iOS中的一种实现 KVO 一、KVO的介绍 KVO就是观察者模式,说白了就是你关心的...

  • iOS基础(四) - KVC和KVO

    iOS观察者模式学习 (1)KVC与KVO简介 KVC KVC(Key-value coding)是一种间接更改对...

  • 你真的了解KVO和KVC吗

    KVO和KVC的表面意思很简单,KVO是键值观察者,用来进行事件的监听;KVC则是键值编码,通过对象的Key来来...

  • iOS KVO,KVC

    iOS KVO,KVC KVO 1.KVO 是一种观察者设计模式,是利用 isa 混写机制来实现 KVO 的。 当...

  • 通知及KVC/KVO

    KVC/KVO 添加观察者self.person = [[Person alloc]init];self.pers...

  • iOS开发面试攻略(KVO、KVC、多线程、锁、runloop、

    KVO & KVC KVO用法和底层原理 使用方法:添加观察者,然后怎样实现监听的代理 KVO底层使用了 isa-...

  • KVO应用、原理及自实现

    一.KVO简介 KVO 是ios里,观察者设计模式的一种应用实现,依赖runtime,基于KVC,KVO提供了一种...

网友评论

      本文标题:8.25 KVC & KVO 观察者

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