我有一个使用KVO功能的代码。
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
...
let oldRect = change?[NSKeyValueChangeOldKey] as! NSRect
因此,当我试图将值转换为NSRect时,我收到错误:
error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).
对象是NSRect类型对象:
(lldb) po change?[NSKeyValueChangeOldKey]
▿ Optional<AnyObject>
- Some : NSRect: {{293, 21}, {108, 108}}
答案 0 :(得分:1)
如您所知,change
的{{1}}参数属于observeValueForKeyPath(_:ofObject:change:context:)
类型,而且在内部,它是[String : AnyObject]?
,不能包含NSDictionary
值。
因此,KVO将值转换为包含NSRange
的{{1}}。但不幸的是,它无法直接与Swift中的NSValue
桥接。
尝试这样的事情:
NSRange