通过addObserver上下文参数传递字典?

时间:2015-09-19 18:00:05

标签: swift

我需要观察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的地方吗?

0 个答案:

没有答案