首页 > 代码库 > Swift中KVC和KVO的使用

Swift中KVC和KVO的使用

原创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 = http://www.mamicode.com/instance.valueForKey("hwcCSDN") as String>
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的使用