web-dev-qa-db-ja.com

Swift Combineを使用してタイマーパブリッシャーを作成します

私は SwiftUI WWDCトークによるデータフロー を見てきました。彼らは、SwiftUIビューに接続され、時間でUIを更新するタイマーパブリッシャーを使用するサンプルコードを含むスライドを持っています。

私はまったく同じことをしたいいくつかのコードに取り組んでいますが、これを理解することができませんPodcastPlayer.currentTimePublisherが実装され、UI構造体にフックされます。 Combineに関するビデオもすべて見ました。

どうすればこれを達成できますか?

サンプルコード:

struct PlayerView : View {
  let episode: Episode
  @State private var isPlaying: Bool = true
  @State private var currentTime: TimeInterval = 0.0

  var body: some View {
    VStack { // ...
      Text("\(playhead, formatter: currentTimeFormatter)")
    }
    .onReceive(PodcastPlayer.currentTimePublisher) { newCurrentTime in
      self.currentTime = newCurrentTime
    }
  }
}
13
eivindml

それは読者の練習問題として残されたと思います。

これはタイマーパブリッシャー自体ではなく、ポッドキャストの現在時刻のパブリッシャーではないことに注意してください。つまり、currentTimeが変更された場合にのみ、定期的にパブリッシュされません。

これを処理するはずの@Publishedというプロパティラッパーがありますが、まだ試していません: https://developer.Apple.com/documentation/combine/published

0
Michael Salmon