我需要观察AVPlayer
的状态,所以我添加一个观察者:
let player = AVPlayer(URL: NSURL(fileURLWithPath: tempFilePath))
player.addObserver(self, forKeyPath: "status", options: nil, context: nil)
用相关功能观察变化:
override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) {
if object is AVPlayer {
var player = object as! AVPlayer
player.removeObserver(self, forKeyPath: "status")
}
}
这很好,但是,我需要在observeValueForKeyPath
函数中提供更多信息,即字典:
var context = [
"layer": CALayer(),
"filePath": String()
]
因此,我想我可以在context参数下传递该字典,因为:
上下文指针可用作唯一标识符,用于确定正在观察的更改,或向观察者提供一些其他数据(Source)
我不完全确定如何传递context
变量,其[String, AnyObject]
类型为UnsafeMutablePointer<Void>
类型。
阅读this,我想我可以做类似的事情:
UnsafeMutablePointer(Unmanaged.passUnretained(context).toOpaque())
...
Unmanaged<[String, AnyObject]>.fromOpaque(COpaquePointer(context)).takeUnretainedValue()
但毫不奇怪,这不起作用。我还想我可以通过引用传递变量&context
,但我无法解码原始变量的地址。这是使用NSCoder
的地方吗?