Swift 4 переключиться на новый API наблюдения - PullRequest
0 голосов
/ 24 сентября 2018

У меня проблемы с новым observe API в Swift 4.

player = AVPlayer()
player?.observe(\.currentItem.status, options: [.new], changeHandler: { [weak self] (player, newValue) in
    if let status = AVPlayer.Status(rawValue: (newValue as! NSNumber).intValue) {

   }
 }

Но я получаю ошибку

Тип выражения неоднозначен без дополнительного контекста.

Как это исправить?Не уверен насчет синтаксиса keyPath.

Существует также предупреждение при извлечении AVPlayerStatus в закрытии выше

Приведение из 'NSKeyValueObservedChange' к несвязанному типу 'NSNumber' всегда завершается неудачей '

1 Ответ

0 голосов
/ 24 сентября 2018

currentItem является необязательным свойством AVPlayer.Следующие компиляции в Swift 4.2 / Xcode 10 (обратите внимание на дополнительный вопросительный знак в пути ключа):

let observer = player.observe(\.currentItem?.status, options: [.new]) {
    (player, change) in
    guard let optStatus = change.newValue else {
        return // No new value provided by observer
    }
    if let status = optStatus {
        // `status` is the new status, type is `AVPlayerItem.Status`
    } else {
        // New status is `nil`
    }
}

Наблюдаемое свойство является необязательным AVPlayer.Status?, поэтому change.newValue внутри обратного вызова является «двойной необязательный ”AVPlayer.Status?? и должен быть развернут дважды.

Возможно, не удастся скомпилировать в более старых версиях Swift, сравните Swift 'наблюдаем ()' не работает для ключевых путей с дополнительными параметрами? на форуме Swift.

...