[RxSWIFT]SignalとDriver!


リアクション型プログラミングReactive Xを学んでいる最近、Driverの用途は分かっていますが、Signalという見慣れない概念が出てきたので勉強してみたいと思います.
結論から,信号はパブリッシュSubjectと類似しており,DriverはBehaviorSubjectと類似している.では、2つの特性にはどんな共通点と違いがあるのでしょうか.
💡 SignalとDriverは、RxSWIFTとUIKETを組み合わせたRxCococoで使用されるツールです.

信号とドライバの共通点

  • エラーは発生しません.
  • メインスレッドで実行します.

  • SignalとDriverを使用する最大の特徴は,上述した共通点である.UIはメインスレッドで処理する必要があるため、RxCocoaのこれらの特性を使用しないと、各論理をスレッドに変換することは困難である.

  • エラーが発生しないのもこのような脈絡に似ています.エラーが発生してもUIは反応を続けなければならないので、Streamは死ぬのではなく生き続けるべきだ.
  • SignalとDriverの違い


    前述したように、SignalはPublishSubjectに似ており、DriverはBehaviorSubjectに似ている.イメージで簡単に見てみましょう

    Driverの場合


    下図のようにDriverについては、subscribeを行うと、最近のデータが受信されます.
    また、driveという論理を実現して、受信したイベントを処理することもできる.
    searchButtonTapped
    	.asDriver(onErrorJustReturn: "")
    	.drive(to: self.rx.endEditing)

    シグナルの場合


    Signalの場合、サブスクリプションがDriverと異なる場合、最近のデータは返されず、サブスクリプションが受信された後に発生した値が返されます.
    同様に、subscribeではなくemitという方法でイベントを処理します.
    searchButtonTapped
    	.asSignal()
    	.emit(to: self.rx.endEditing)
    

    https://reactivex.io/documentation/subject.html
    https://medium.com/@hongseongho/%EB%B2%88%EC%97%AD-signal-and-relay-in-rxcocoa-4-619d5194dcbd![](https://media.vlpt.us/images/wannabe_eung/post/99602d30-1621-4cef-8ca2-97ecb4b5b302/image.png)![](https://media.vlpt.us/images/wannabe_eung/post/36604098-218a-4f00-9619-4e1eff546eeb/image.png )