Swift中KVC和KVO的使用
來源:程序員人生 發(fā)布時(shí)間:2014-11-22 09:19:11 閱讀次數(shù):7401次
原創(chuàng)BLog,轉(zhuǎn)載請注明出處
Swift中使用KVC和KVO的類都必須必須繼承自NSObject
KVC
key-value coding
是1種間接訪問對象的機(jī)制
key的值就是屬性名稱的字符串,返回的value是任意類型,需要自己轉(zhuǎn)化為需要的類型
KVC主要就是兩個(gè)方法
(1)通過key設(shè)置對應(yīng)的屬性
(2)通過key獲得對應(yīng)的屬性
舉例
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之上的的機(jī)制
主要功能是檢測對象屬性的變化
這是1個(gè)完善的機(jī)制,不需要用戶自己設(shè)計(jì)復(fù)雜的視察者模式
對需要視察的屬性要在前面加上dynamic關(guān)鍵字
舉例
第1步,對要視察的對象的屬性加上dynamic關(guān)鍵字
class ToObserver:NSObject{
dynamic var hwcDate = NSDate()
func updateDate(){
hwcDate = NSDate()
}
}
第2步,聲明1個(gè)全局的用來辨別是哪一個(gè)被視察屬性的變量
private var mycontext = 0
第3步,在要視察的類中addObserver,在析構(gòu)中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]!)")
}
}
}
這樣,就能夠在函數(shù)observeValueForKeyPath檢測到變化了
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)