【发布时间】:2018-01-10 19:29:15
【问题描述】:
我想创建一个具有默认 kvo 功能的协议。但是我有一个协议扩展继承 NSObject 的问题。当我尝试覆盖observeValue(forKeyPath 时,我收到错误Method does not override any method from its superclass。这是我正在尝试做的一些示例代码
protocol VideoTest {
var player:AVPlayer { get set }
func trackVideoStart()
}
struct ObserverContexts {
static var playerRate = 0
}
extension VideoTest where Self: NSObject {
func addPlayerObservers() {
player.addObserver(self, forKeyPath: #keyPath(AVPlayer.rate),
options: ([.old, .new]),
context: &ObserverContexts.playerRate)
}
//gives error
override public func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?,
context: UnsafeMutableRawPointer?) {
}
}
由于我不能直接从 NSObject 继承,是否可以通过协议扩展使用 KVO?
【问题讨论】:
-
我不熟悉 Swift 但
observe(_:options:changeHandler:)怎么样?查看Adopting Cocoa Design Patterns中的键值观察?
标签: swift protocols avplayer key-value-observing