迅速-KVO-change.newValue和change.oldValue为零

Mar*_*era 6 swift

我正在使用新的KeyValue观察。当变量更改时,我接到观察者的电话,但是该change结构附带了newValueoldValue两者都为nil,所以它永远不会起作用//do something

let observer = foo.observe(\.bar, options: [.new, .old]) { obj, change in
   if change.kind == .setting && change.oldValue != change.newValue {
       // do something
   }
}
Run Code Online (Sandbox Code Playgroud)

过去,它可以与旧的KVO方法完美配合。

作为示例,我使该代码更简单,这是对我的实际代码的调试。你可以看到,m对象具有status变种已被设置为PREPARING,但两者change.oldValuechange.newValue是零:

在此处输入图片说明

0xc*_*ced 7

这是一个 Swift 错误,已报告为https://bugs.swift.org/browse/SR-5872https://github.com/apple/swift/pull/20757正在讨论解决此问题的拉取请求,但截至 2021 年 3 月尚未合并。