2016-09-30 11 views
1

У меня есть AVPlayer для онлайн-аудиопотока & AVQueuePlayer для автономной очереди для воспроизведения нескольких песен.Определите разницу между AVPlayer и AVQueuePlayer KVO

MyCode

self.myQueuePlayer?.addObserver(self, forKeyPath: "timedMetadata", options: NSKeyValueObservingOptions.new, context: nil) 

myPlayer.currentItem?.addObserver(self, forKeyPath: "timedMetadata", options: [.new,.old,.initial], context: nil) 

Как наблюдатель КВО для "timedMetadata" & ГЭТ это AVPlayer или AVQueuePlayer?

ответ

0

Вы можете использовать контекстный аргумент различать между различными объектами КВО:

// class 
private var playerContext = 0 
private var queuePlayerContext = 0 

func setup() { 
    self.myQueuePlayer?.addObserver(self, forKeyPath: "timedMetadata", options: .new, context: &queuePlayerContext) 
    myPlayer.currentItem?.addObserver(self, forKeyPath: "timedMetadata", options: .new, context: &playerContext) 
} 

override open func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
    guard let context = context else { 
     return 
    } 

    if keyPath == "timedMetadata" { 
     switch context { 
     case &queuePlayerContext: 
      print("queuePlayer") 
     case &playerContext: 
      print("playerContext") 
     default: 
      break 
     } 
    } 
}