[RxSwfit] - Observable, Subject, Relay
RxSWIFTの勉強を始める
短期的な目標は、アプリケーションストアで発売された最初のアプリケーションをRx+MVVMに再構成することです.
でも本当にまだまだ長い道がありますね既存の方法とは全く違ってMVVMを学ぶのは、確かに難しい!
これからRxにもっと詳しくなって、他の人に説明できる程度になったら、最初から丁寧に説明してもいいですよ!
今回のPostingは毎日紛らわしいObserverable Subject Relayについて
この機会に、私たちは明確に概念を掌握することができると思います.
イベントを解放します.(Observable -> event -> observer)
他のObserverableは購読できません
イベントを解放します.(Subject -> event -> observer)
他のObserverableを購読できます!
つまり、観察者と言ってもいいし、観察者と言ってもいい!
あと4種類のSubjectがあります.
1.subjectにHello、World、SWIFTを伝える
2.サブスクリプション
3、RxSWIFT、RxCocoaとComplete
したがって、Hello、World、SWIFTは無視され、RxSWIFT、RxCocoaは出力されます.
Start,Hello,Worldは無視され,SWIFT,RxSWIFT,RxCocoaはすべて出力されるでしょう.
RelayはWrapping Subjectです.
また完全なイベントがもらえないのでAsyncRelayは存在しないのではないでしょうか?
いつ使いますか.
ユーザーはボタンを押して、error、completeイベントは転送すべきではありませんか?
主にUIイベント処理に用いられる.
実はそんなに難しくないでしょう.私も毎日混同していますが、整理するときは本当に簡単です.
短期的な目標は、アプリケーションストアで発売された最初のアプリケーションをRx+MVVMに再構成することです.
でも本当にまだまだ長い道がありますね既存の方法とは全く違ってMVVMを学ぶのは、確かに難しい!
これからRxにもっと詳しくなって、他の人に説明できる程度になったら、最初から丁寧に説明してもいいですよ!
今回のPostingは毎日紛らわしいObserverable Subject Relayについて
この機会に、私たちは明確に概念を掌握することができると思います.
Observable
イベントを解放します.(Observable -> event -> observer)
他のObserverableは購読できません
Subject
イベントを解放します.(Subject -> event -> observer)
他のObserverableを購読できます!
つまり、観察者と言ってもいいし、観察者と言ってもいい!
あと4種類のSubjectがあります.
subject.onNext("Hello")
subject.onNext("World")
subject.onNext("Swift")
subject
.subscribe(onNext: {print($0)})
.disposed(by: bag)
subject.onNext("RxSwift")
subject.onNext("RxCocoa")
subject.onCompleted()
簡単なサンプルコードを見てみましょう.1.subjectにHello、World、SWIFTを伝える
2.サブスクリプション
3、RxSWIFT、RxCocoaとComplete
1. PublishSubject
let subject = PublishSubject<String>()
PublishSubjectでは、購読者が購読した値のみが渡されます.したがって、Hello、World、SWIFTは無視され、RxSWIFT、RxCocoaは出力されます.
2. BehaviorSubject
let subject = BehaviorSubject<String>(value: "Start")
BehavorSubjectには初期値があります.また、サブスクリプションの前に渡された最新の値も渡します.Start,Hello,Worldは無視され,SWIFT,RxSWIFT,RxCocoaはすべて出力されるでしょう.
3. ReplaySubject
let subject = ReplaySubject<String>.create(bufferSize: 3)
ReplaySubjectにはバッファがあります.指定したbufferSizeに最新イベントを保存し、サブスクライバに転送します.4. AsyncSubject
let subject = AsyncSubject<String>()
AsyncSubjectは、サブスクライバとしてイベントを転送完了すると、最近の次のイベントを転送します.Relay
RelayはWrapping Subjectです.
public final class PublishRelay<Element>: ObservableType {
private let subject: PublishSubject<Element>
// Accepts `event` and emits it to subscribers
public func accept(_ event: Element) {
self.subject.onNext(event)
}
/// Initializes with internal empty subject.
public init() {
self.subject = PublishSubject()
}
/// Subscribes observer
public func subscribe<Observer: ObserverType>(_ observer: Observer) -> Disposable where Observer.Element == Element {
self.subject.subscribe(observer)
}
/// - returns: Canonical interface for push style sequence
public func asObservable() -> Observable<Element> {
self.subject.asObservable()
}
}
コードを見れば、正確に分かるでしょう?accpetの方法としてonNextのみを処理することに注意してください.1. PublishRelay
publishSubject를 Wrapping하고 있습니다
2. BehaviorRelay
BehaviorSubject를 Wrapping하고 있습니다
3. ReplayRelay
ReplayRelay를 Wrapping하고 있습니다.
完全なイベントを受信しない場合を除き、実行結果は上記と同じです.また完全なイベントがもらえないのでAsyncRelayは存在しないのではないでしょうか?
いつ使いますか.
ユーザーはボタンを押して、error、completeイベントは転送すべきではありませんか?
主にUIイベント処理に用いられる.
実はそんなに難しくないでしょう.私も毎日混同していますが、整理するときは本当に簡単です.
Reference
この問題について([RxSwfit] - Observable, Subject, Relay), 我々は、より多くの情報をここで見つけました https://velog.io/@aurora_97/RxSwfit-Observable-Subject-Relayテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol