web-dev-qa-db-ja.com

PassthroughSubjectとCurrentValueSubjectとは

たまたまAppleの新しいCombineフレームワークを調べたところ、2つのことがわかりました。

PassthroughSubject<String, Failure>

CurrentValueSubject<String, Failure>

誰かが私にそれらの意味と使用法を説明できますか?

3
Nasir

PassthroughSubjectCurrentValueSubjectはどちらもPublishers(Combineによって導入されたタイプ)であり、サブスクライブできます(値が使用可能なときに値に対して操作を実行します)。

どちらもCombineパラダイムの使用に簡単に移行できるように設計されています。どちらにも値とエラータイプがあり、値を「送信」することができます(すべてのサブスクライバーが値を使用できるようにします)。

私が見た2つの主な違いは、CurrentValueSubjectが値で始まるのに対し、PassthroughSubjectは値ではないということです。 PassthroughSubjectは、少なくとも私にとっては、概念的に把握しやすいようです。

PassthroughSubjectは、デリゲートパターンの代わりに、または既存のデリゲートパターンを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)
    }
}

これらの例はどちらも、値のタイプとしてStringを使用していますが、何でもかまいません。

お役に立てれば!

0
Sam