Swift 从KVO获取值-返回NSConreteValue
我有以下KVO观察员:Swift 从KVO获取值-返回NSConreteValue,swift,key-value-observing,Swift,Key Value Observing,我有以下KVO观察员: override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { if context == &kvoContext { if (keyPath == "transform
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if context == &kvoContext {
if (keyPath == "transform") {
if let transform = change![NSKeyValueChangeNewKey] {
print("transform: \(transform)")
overlay.transform = transform as! CGAffineTransform
}
}
}
}
但是,在我的变量窗口中,我将transform
视为NSConcreteValue:
我在最后一行尝试设置覆盖时崩溃了。转换:
fatal error: unexpectedly found nil while unwrapping an Optional value
如何检索该值?您的转换将自动装箱到
NSValue
对象中。您需要像这样访问它
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if context == &kvoContext {
if (keyPath == "transform") {
if let transform = change?[NSKeyValueChangeNewKey] as? NSValue {
overlay.transform = transform.CGAffineTransformValue()
}
}
}
}
重写函数observeValueForKeyPath(键路径:String?,对象的类型:AnyObject?,更改:[String:AnyObject]?,上下文:UnsafeMutablePointer){
如果上下文==&kvoContext{
如果(关键路径==“变换”){
如果让变换=将?[NSKeyValueChangeNewKey]更改为?NSValue{
overlay.transform=transform.cgaffinetTransformValue()
}
}
}
}
我现在得到了与null
相同的崩溃和转换
-您能确认您的完整代码与上面的一样吗。如果这仍然崩溃,您可以提供关于崩溃的更多信息以及如何注册和触发此KVO的示例。另外,作为旁注,您需要小心,因为状态…UIKit框架通常不支持KVO…
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if context == &kvoContext {
if (keyPath == "transform") {
if let transform = change?[NSKeyValueChangeNewKey] as? NSValue {
overlay.transform = transform.CGAffineTransformValue()
}
}
}
}