web-dev-qa-db-fra.com

Créer un Timer Publisher en utilisant Swift Combine

J'ai regardé le flux de données à travers SwiftUI WWDC talk . Ils ont une diapositive avec un exemple de code où ils utilisent un éditeur Timer qui se connecte à une vue SwiftUI et met à jour l'interface utilisateur avec l'heure.

Je travaille sur un code où je veux faire exactement la même chose, mais je ne peux pas comprendre comment cela PodcastPlayer.currentTimePublisher est implémenté, puis accroché à la structure d'interface utilisateur. J'ai également regardé toutes les vidéos sur Combine.

Comment puis-je atteindre cet objectif?

L'exemple de code:

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

Je crois que cela a été laissé comme exercice pour le lecteur.

Veuillez noter que ce n'est pas un éditeur de minuteur en soi, mais un éditeur de l'heure actuelle dans le podcast, c'est-à-dire qu'il n'est pas publié périodiquement, uniquement lorsque l'heure actuelle change.

Il existe un wrapper de propriété appelé @Published qui est censé gérer cela, mais je ne l'ai pas encore essayé: https://developer.Apple.com/documentation/combine/published

0
Michael Salmon