将KVO封装在这样的延续中安全吗?我担心的是,如果
play
在调用现有的KVO回调之前再次调用
observer
将被取消绑定,并且从未调用回调,使继续挂起
var observer: NSKeyValueObservation?
var playerItem: AVPlayerItem?
func play(asset: AVURLAsset) async throws {
playerItem = AVPlayerItem(asset: asset)
let readyToPlay = try await withCheckedThrowingContinuation { continuation in
observer = playerItem?.observe(\.status, changeHandler: { item, _ in
swtich item.status:
case .readyToPlay: continuation.resume(returning: true)
default: continuation.resume(throwing: item.error!)
}
}
...
}