web-dev-qa-db-fra.com

Différence entre CurrentValueSubject et @Published

Je suis donc en train de creuser dans la moissonneuse-batteuse et cette question s'est posée.

Existe-t-il une réelle différence entre l'utilisation de CurrentValueSubject (et la définition de sa valeur à l'aide de currentValueSubject.value) ou en utilisant un @Published var et accéder à son éditeur avec un $? Je veux dire que je sais que l'on renvoie un Subject au lieu d'un Publisher, mais la seule vraie différence que j'ai pu trouver est que CurrentValueSubject est bien plus utile parce que vous pouvez le déclarer sur un protocole.

Je ne comprends vraiment pas comment @Published peut être utile si nous pouvons simplement utiliser PassthroughSubject, est-ce que je manque quelque chose ici? Attention, cela utilise UIKit, il peut avoir d'autres utilisations pour SwiftUI.

Je vous remercie.

6
Mykod

@Published n'est qu'un moyen rapide d'utiliser CurrentValueSubject un peu mieux. Quand je débogue une de mes applications et regarde le type retourné par $ paramName, c'est en fait juste un CurrentValueSubject:

po self.$books
▿ Publisher
  ▿ subject : <CurrentValueSubject<Array<Book>, Never>: 0x6000034b8910>

Je suppose qu'un avantage de l'utilisation de CurrentValueSubject au lieu de @Published peut être de vous permettre d'utiliser le type d'erreur?

Remarque: En dépit d'être un CurrentValueSubject en ce moment je ne compterais jamais sur cette hypothèse.

1
Jason