Il se trouve que je regarde le nouveau framework Combine d'Apple, où je vois deux choses
PassthroughSubject<String, Failure>
CurrentValueSubject<String, Failure>
Quelqu'un peut-il m'expliquer ce que cela signifie et leur utilisation?
PassthroughSubject
et CurrentValueSubject
sont tous deux Publisher
s - un type introduit par Combine - auquel vous pouvez vous abonner (en effectuant des opérations sur des valeurs lorsque des valeurs sont disponibles).
Ils sont tous deux conçus pour faciliter le passage à l'utilisation du paradigme Combine. Ils ont tous deux une valeur et un type d'erreur, et vous pouvez leur "envoyer" des valeurs (en mettant les valeurs à la disposition de tous les abonnés)
La principale différence entre les deux que j'ai vues est que CurrentValueSubject
commence par une valeur, alors que PassthroughSubject
ne le fait pas. PassthroughSubject
semble plus facile à comprendre conceptuellement, du moins pour moi.
PassthroughSubject
peut facilement être utilisé à la place d'un modèle de délégué, ou pour convertir un modèle de délégué existant en Combine.
//Replacing the delegate pattern
class MyType {
let publisher: PassthroughSubject<String, Never> = PassthroughSubject()
func doSomething() {
//do whatever this class does
//instead of this:
//self.delegate?.handleValue(value)
//do this:
publisher.send(value)
}
}
//Converting delegate pattern to Combine
class MyDel: SomeTypeDelegate {
let publisher: PassthroughSubject<String, Never> = PassthroughSubject()
func handle(_ value: String) {
publisher.send(value)
}
}
Ces deux exemples utilisent String
comme type de valeur, alors qu'il peut s'agir de n'importe quoi.
J'espère que cela t'aides!