原创BLog,转载请注明出处
Swift中使用KVC和KVO的类都必须必须继承自NSObject
KVC
key-value coding
是1种间接访问对象的机制
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之上的的机制
主要功能是检测对象属性的变化
这是1个完善的机制,不需要用户自己设计复杂的视察者模式
对需要视察的属性要在前面加上dynamic关键字
举例
第1步,对要视察的对象的属性加上dynamic关键字
class ToObserver:NSObject{
dynamic var hwcDate = NSDate()
func updateDate(){
hwcDate = NSDate()
}
}
第2步,声明1个全局的用来辨别是哪一个被视察属性的变量
private var mycontext = 0
第3步,在要视察的类中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检测到变化了