web-dev-qa-db-fra.com

Qu'est-ce que PassthroughSubject & CurrentValueSubject

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?

3
Nasir

PassthroughSubject et CurrentValueSubject sont tous deux Publishers - 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!

0
Sam