【发布时间】:2021-03-08 22:47:39
【问题描述】:
我正在寻找包装 AVPlayer 的播放和暂停方法,以便我可以使用 ReCombine 效果从 SwiftUI 调度操作,最终播放和暂停一些音频。
public extension AVPlayer {
func timeControlPub() -> AnyPublisher<TimeControlStatus, Never> {
publisher(for: \.timeControlStatus).eraseToAnyPublisher()
}
func playPub() -> AnyPublisher<() -> Void, Never> {
publisher(for: \.play).eraseToAnyPublisher()
}
}
上面的 sn-p 显示了播放 API 的一般概念和错误:
关键路径不能引用实例方法'play()'
我也试过
protocol PlaybackAPIManager {
func playStream() -> AnyPublisher<()-> Void, Never>
}
extension AVPlayer: PlaybackAPIManager {
func playStream() -> AnyPublisher<()-> Void, Never>{
return AVPlayer.play
}
}
但收到错误:
无法将“(AVPlayer) -> () -> Void”类型的返回表达式转换为“AnyPublisher Void, Never>”类型的返回表达式
static let togglePlayPause = Effect(dispatch: false) { (actions: AnyPublisher<Action, Never>) in
actions.ofTypes(TogglePlay.self)
.flatMap(playStremAPI)
.print("Stream Played")
.eraseToAnyPublisher()
}
我无法使用 AnyPublisher 包装 AVPlayer 方法来安抚 ReCombine。
【问题讨论】:
标签: swift avfoundation avplayer combine