码迷,mamicode.com
首页 > 编程语言 > 详细

Swift中KVC和KVO的使用

时间:2014-10-29 22:25:05      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:swift   kvo   kvc   

原创BLog,转载请注明出处

Swift中使用KVC和KVO的类都必须必须继承自NSObject

KVC

key-value coding
是一种间接访问对象的机制
key的值就是属性名称的字符串,返回的value是任意类型,需要自己转化为需要的类型
KVC主要就是两个方法
(1)通过key设置对应的属性
(2)通过key获取对应的属性
举例
class TestForKVC:NSObject{
    var hwcCSDN = "hello world"
}
var instance = TestForKVC()
var value = instance.valueForKey("hwcCSDN") as String
instance.setValue("hello hwc",forKey:"hwcCSDN")

KVO
key-value observing
建立在KVC之上的的机制
主要功能是检测对象属性的变化
这是一个完善的机制,不需要用户自己设计复杂的观察者模式
对需要观察的属性要在前面加上dynamic关键字
举例
第一步,对要观察的对象的属性加上dynamic关键字
class ToObserver:NSObject{
    dynamic var hwcDate = NSDate()
    func updateDate(){
    hwcDate = NSDate()
    }
}

第二步,声明一个全局的用来区分是哪个被观察属性的变量
private var mycontext = 0

第三步,在要观察的类中addObserver,在析构中removeObserver,重写observerValueForKeyPath
class TestForCSDN:UIViewController{
    var testVariable = ToObserver()
    override func viewDidLoad(){
	super.viewDidLoad()
	testVariable.addObserver(self,forKeyPath:"hwcDate",options:.New,context:&mycontext)
}
    deinit{
        testVariable.removeObserver(self,forKeyPath:"hwcDate")
    }
    overfide func observeValueForKeyPath(keyPath:String,ofObject:AnyObject,change:[NSObject:AnyObject],context:UnsafeMutablePointer<Void>){
        if(context == &mycontext){
             println("Changed to:\(change[NSKeyValueChangeNewKey]!)")
        }
    }
}

这样,就可以在函数observeValueForKeyPath检测到变化了

Swift中KVC和KVO的使用

标签:swift   kvo   kvc   

原文地址:http://blog.csdn.net/hello_hwc/article/details/40590955

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!