Meine RxSwift-Zusammenfassung ⑤ (Was sind Themen / Relais?)

Dieser Artikel ist Meine RxSwift-Zusammenfassung ①, Meine RxSwift-Zusammenfassung② Meine RxSwift-Zusammenfassung ③ (Was ist beobachtbar? - Teil 1), [Meine RxSwift-Zusammenfassung ④ (Was ist Disposebag?)](Https: //qiita.com/Masa_asaM/items/0b1196940cb3f5fcfe0b) ist eine Fortsetzung.

Was ist ein Thema?

"Subjekt" arbeitet sowohl als "Beobachter" als auch als "beobachtbar". Es kann Ereignisse empfangen, verarbeiten und Ereignisse generieren. ..

PublishSubject PublishSubject ist einSubject, das ohne Anfangswert beginnt und Abonnent nur die neu veröffentlichten Elemente nach Abonnieren mitteilt. ("Abgeschlossen" / "Fehler" wird jedoch auch an den "Abonnenten" übertragen, der nach seiner Freigabe "Abonnieren" war.) Wie im Marmordiagramm gezeigt, image.png Wird Wenn Sie das Marmordiagramm im Code ausdrücken,

PublishSubject.swift


let publishSubject = PublishSubject<String>()
publishSubject.onNext("1")
let subscriber1 = publishSubject
    .subscribe{ event in
        print("subscriber1:" , event.element ?? event)
}
publishSubject.onNext("2")
let subscriber2 = publishSubject
    .subscribe{ event in
        print("subscriber2:" , event.element ?? event)
}
publishSubject.onNext("3")
publishSubject.onCompleted()
let subscriber3 = publishSubject
    .subscribe{ event in
        print("subscriber3:" , event.element ?? event)
}

Ausgabe


subscriber1: 2
subscriber1: 3
subscriber2: 3
subscriber1: completed
subscriber2: completed
subscriber3: completed

Wird sein.

Wann wird es verwendet?

Da "PublishSubject" praktisch ist, wenn "Abonnent" über ein neues Ereignis informiert wird, wird es zum Aktualisieren entsprechend dem Klick des Benutzers verwendet. Da es in Echtzeit hervorragend ist, kann es außerdem auf Chats und dergleichen angewendet werden, bei denen häufiger Austausch durchgeführt wird.

BehaviorSubject Behaviour Subject ist Publish Subject mit dem Konzept von Replay (= Übertragen des neuesten Ereignisses an Subscriber). Wenn kein Anfangswert vorhanden ist, kann daher keine Wiederholung durchgeführt werden, und es tritt ein Fehler auf. Es ist wichtig, einen Anfangswert zu haben oder "Element" als "optional" zu definieren.

Wie im Marmordiagramm gezeigt, image.png Wird sein. Wenn Sie das Marmordiagramm im Code ausdrücken,

BehaviorSubject.swift


let behaviorSubject = BehaviorSubject<String>(value: "1")
let subscriber1 = behaviorSubject
    .subscribe{ event in
        print("subscriber1:" , event.element ?? event)
}
behaviorSubject.onNext("2")
let subscriber2 = behaviorSubject
    .subscribe{ event in
        print("subscriber2:" , event.element ?? event)
}
behaviorSubject.onNext("3")
behaviorSubject.onCompleted()
let subscriber3 = behaviorSubject
    .subscribe{ event in
        print("subscriber3:" , event.element ?? event)
}

Ausgabe


subscriber1: 1
subscriber1: 2
subscriber2: 2
subscriber1: 3
subscriber2: 3
subscriber1: completed
subscriber2: completed
subscriber3: completed

Wann wird es verwendet?

Da "BehaviorSubject" den neuesten Status von "Subject" in der Ansicht anzeigen kann, wird es in Situationen verwendet, in denen beispielsweise der neueste Wert im Voraus in "placeholder" eingegeben oder während des Ladens ein Indikator angezeigt wird.

ReplaySubject Mit "BehaviorSubject" konnte nur das letzte Ereignis an "Subscriber" übertragen werden, aber mit "ReplaySubject" kann die in der Puffergröße angegebene Anzahl von Ereignissen übertragen werden. Wenn Sie jedoch die Puffergröße erhöhen oder zu viele Daten verwenden, z. B. ein Bild, kann dies zu Speicherengpässen führen. Seien Sie also vorsichtig. Wie im Marmordiagramm gezeigt, image.png Wird Wenn Sie das Marmordiagramm im Code ausdrücken,

ReplaySubject.swift


let replaySubject = ReplaySubject<String>.create(bufferSize: 2)
replaySubject.onNext("1")
replaySubject.onNext("2")
let subscriber1 = replaySubject
    .subscribe { event in
        print("subscriber1:", event.element ?? event)
}
replaySubject.onNext("3")

Ausgabe


subscriber1: 1
subscriber1: 2
subscriber1: 3

Wird sein.

Wann wird es verwendet?

Es wird verwendet, wenn Sie einen Unterschied zum vorherigen machen möchten.

AsyncSubject "AsyncSubject" übergibt den letzten Wert unmittelbar nach der Wiedergabe von "erledigt" an "Teilnehmer". Wie im Marmordiagramm gezeigt, image.png Wird sein.

Dies im Code ausdrücken,

AsyncSubject.swift


let asyncSubject = AsyncSubject<String>()
asyncSubject.onNext("1")
let subscriber1 = asyncSubject
    .subscribe { event in
        print("subscriber1:", event.element ?? event)
}
asyncSubject.onNext("2")
let subscriber2 = asyncSubject
    .subscribe { event in
        print("subscriber2:", event.element ?? event)
}
asyncSubject.onNext("3")
asyncSubject.onCompleted()

Ausgabe


subscriber1: 3
subscriber2: 3
subscriber1: completed
subscriber2: completed

Wird sein.

Wann wird es verwendet?

Nützlich beim Empfang von API-Rückrufen

Was ist Relais?

"Relais" ist der [Wrapper] von "Subjekten" (https://qiita.com/dsudo/items/51ca822169ef9f8b9bc3). Seine Rolle als Wrapper besteht darin, "Fehler" und "Abgeschlossene" nicht zu akzeptieren, sondern nur die Elemente zu übergeben, die in "Weiter" mit "Akzeptieren" (_ :) "fließen.

"Relais veröffentlichen" entspricht "Betreff veröffentlichen", und "Verhaltensrelais" entspricht "Betreff". Der Code lautet wie folgt.

PublishRelay.swift


let publishRelay = PublishRelay<String>()

let disposeBag = DisposeBag()
publishRelay.accept("1")
publishRelay
    .subscribe(onNext: {
        print($0)
    })
    .disposed(by: disposeBag)

publishRelay.accept("2")

Ausgabe


2

BehaviorRelay.swift


let behaviorRelay = BehaviorRelay(value: "Initial value")
let disposeBag = DisposeBag()

behaviorRelay.accept("1")

behaviorRelay
    .subscribe {
        print("subscriber1:" , $0.element ?? $0)
}
.disposed(by: disposeBag)

behaviorRelay.accept("2")

behaviorRelay
    .subscribe {
        print("subscriber2:", $0.element ?? $0)
}
.disposed(by: disposeBag)

behaviorRelay.accept("3")

Ausgabe


subscriber1: 1
subscriber1: 2
subscriber2: 2
subscriber1: 3
subscriber2: 3

Wird sein.

Recommended Posts

Meine RxSwift-Zusammenfassung ⑤ (Was sind Themen / Relais?)
Meine RxSwift-Zusammenfassung ③ (Was ist beobachtbar?)
Meine RxSwift-Zusammenfassung ④ (Was ist eine Entsorgungstasche?)
Meine RxSwift-Zusammenfassung ②
Meine RxSwift-Zusammenfassung ①
Was ist Java Assertion? Zusammenfassung.
Was ist Cubby?
Was ist null? ]]
Was ist java
Was ist Schlüsselumhang?
Was ist Maven?
Was ist Jackson?
Was ist Selbst
Was ist Jenkins?
Was ist ArgumentMatcher?
Was ist IM-Jonglieren?
Was ist params
Was ist SLF4J?
Was ist Fassade? ??
Was ist Java <>?
Was ist Gradle?
Was ist POJO?
Was ist java
Was ist centOS?
Was ist RubyGem?
Was ist before_action?
Was ist Docker?
Was ist Byte?
Was ist Tomcat?
Was ist Maven Assembly?
Was ist Docker-Compose?
Was ist ein Konstruktor?
Was ist vue cli
Was ist eine Schnittstelle?
Was ist Rubys Selbst?
Was ist harte Codierung?
Was ist ein Stream?
Was ist Rubys attr_accessor?
Was ist Java-Kapselung?
Was ist die Erlaubnis verweigert?
Was ist Instanzsteuerung?
Was ist ein Initialisierer?
Was ist Spring Tools 4?
Was ist ein Operator?
Was ist Objektorientierung?
Was ist Guavas @VisibleForTesting?
Was ist ein MVC-Modell?
Was ist eine Anmerkung?
Was ist Java-Technologie?
Was ist Java API-Java?
Was ist @ (Instanzvariable)?
Was ist Gradles Artefakt?
Was ist JPA-Prüfung?
[Java] Was ist flatMap?
Was ist ein Servlet?
Was ist Webentwicklung?