程序员人生 网站导航

Swift中KVC和KVO的使用

栏目:互联网时间:2014-11-22 09:19:11

原创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检测到变化了

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐