आप आप क्या चाहते करने के लिए परिवर्तन शब्दकोश टाइपकास्ट करने के लिए है। चूंकि परिवर्तन शब्दकोश है [NSObject: AnyObject], आपको इसे [NSString: Bool] पर डालना पड़ सकता है क्योंकि आप उस तरह के मूल्य की अपेक्षा करते हैं।
let ApprovalObservingContext = UnsafeMutablePointer<Int>(bitPattern: 1)
override func observeValueForKeyPath(keyPath: String!, ofObject object: AnyObject!, change: [NSObject : AnyObject]!, context: UnsafeMutablePointer<Void>) {
if context == ApprovalObservingContext{
if let theChange = change as? [NSString: Bool]{
if let approvedOld = theChange[NSKeyValueChangeOldKey] {
}
if let approvedNew = theChange[NSKeyValueChangeNewKey]{
}
}
}else{
super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)
}
}
संपादित करें:
स्विफ्ट 2.0 के साथ, यहाँ एक वर्ग KVO का उपयोग करता है के लिए एक पूर्ण कार्यान्वयन है,
class Approval: NSObject {
dynamic var approved: Bool = false
let ApprovalObservingContext = UnsafeMutablePointer<Int>(bitPattern: 1)
override init() {
super.init()
addObserver(self, forKeyPath: "approved", options: [.Old, .New], context: ApprovalObservingContext)
}
override func observeValueForKeyPath(keyPath: String?,
ofObject object: AnyObject?,
change: [String : AnyObject]?,
context: UnsafeMutablePointer<Void>) {
if let theChange = change as? [String: Bool] {
if let approvedOld = theChange[NSKeyValueChangeOldKey] {
print("Old value \(approvedOld)")
}
if let approvedNew = theChange[NSKeyValueChangeNewKey]{
print("New value \(approvedNew)")
}
return
}
super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)
}
deinit {
removeObserver(self, forKeyPath: "approved")
}
}
let a = Approval()
a.approved = true
इस कोड संकलन नहीं है। त्रुटि: '[स्ट्रिंग: AnyObject]? ' परिवर्तनीय नहीं है '[एनएसएसटींग: बूल]' ' – RaffAl
@Bearwithme अब अपडेट अपडेट करें। – Sandeep
बहुत बढ़िया! फिक्सिंग के लिए बहुत बहुत धन्यवाद! – RaffAl