Swift中KVC和KVO的使用
來源:程序員人生 發布時間:2014-11-22 09:19:11 閱讀次數:7393次
原創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檢測到變化了
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈