RxSwift - Relay
Relay ClassはRxCocoa 4で実施され、PublishRelayおよびBehaviorRelayクラスが存在する.
RelayはRxCocoaのクラスであり、RxSwiftのSubjectとは異なる.
Error、完了したイベントは存在せず、ライフサイクル終了は存在しません.
Dispose以外の機能は終了していないので、UIに接続するのに適しています.
イベントの種類はAcceptのみですnextにリリースします.
PublishRelay
PublishSubjectと同様の機能を実行します.
(Publish Subjectの場合は、購読前に解放されたイベントは無視してください.)
違いはacceptによってイベントを解放することです.
let pRelay = PublishRelay<Int>()
pRelay.accept(Int.random(in: 0..<4)) //무시
pRelay.subscribe(onNext : {
print($0)
}).disposed(by: disposeBag)
pRelay.accept(Int.random(in: 0..<4))
pRelay.subscribe(onNext: {
print($0)
}).disposed(by: disposeBag)
pRelay.accept(Int.random(in: 0..<4))
31
1
値が共有できる部分も同じです.
BehaviorRelay
包装BehavorSubjectvalueを使用して現在の値を取り出すことができます。(読み取り専用)valueを変更するために。accept()の使用
subjectとの違い
let b = BehaviorSubject<[String]>(value: ["하나","둘","셋","넷"])
let bValue = b.value
b.asObservable().subscribe { print($0) }.disposed(by: disposeBag)
do {
try b.onNext(bValue() + ["다섯"])
}catch {
print(error)
}
next([“1”、“2”、“3”、“4”])next([“1”、“2”、“3”、“4”、“5”])
valueにアクセスして追加するには、オブジェクトがerrorを解放するため、docatch文を使用する必要があります.
let a = BehaviorRelay<[Int]>(value: [1,2,3,4])
let v = a.asObservable()
v.subscribe { print($0) }.disposed(by: disposeBag)
a.accept(a.value + [5] )
next([1, 2, 3, 4])next([1, 2, 3, 4, 5])
ただし、Relayにはerrorとcompletedがないためdocatch文は必要ありません.
value+とacceptの違い
a.accept(a.value + [5] )
a.accept([6])
next([1, 2, 3, 4])
next([1, 2, 3, 4, 5])
next([6])
ReplayRelay
RxSwift 6からReplayRelayを追加.
ReplaySubjectと同様の作成機能があります.
でもonNextとAcceptの違いは
error,completedの間に差がある.
let r = ReplayRelay<Int>.create(bufferSize: 2)
(1...10).forEach { r.accept($0) }
r
.asObservable()
.subscribe { print($0)}.disposed(by: disposeBag)
let first = r.subscribe { print("첫번째 observer == \($0)")}
first.disposed(by: disposeBag)
let second = r.subscribe { print("두번째 observer == \($0)")}
second.disposed(by: disposeBag)
r.accept(99)
r.accept(999)
r.accept(9999)
next(9)
next(10)
첫번째 observer == next(9)
첫번째 observer == next(10)
두번째 observer == next(9)
두번째 observer == next(10)
next(99)
첫번째 observer == next(99)
두번째 observer == next(99)
next(999)
첫번째 observer == next(999)
두번째 observer == next(999)
next(9999)
첫번째 observer == next(9999)
두번째 observer == next(9999)
🍙 BinderがRxCococoからRxSwiftに移動(RxSwift 6リリース)
Binderはその名の通りBinding inputまたはoutputのために使用されますその間、Binderを使用するためにRxCocoaモジュールをインポートする必要があります.
コミュニティの多くの要件に基づいて、RxCocoaモジュールのBinderをRxSWIFTに移動します.RxSwift 6から、Binderを使用するためにRxCocoaモジュールをインポートする必要はなくなりました.
Drive , Bind
簡単なUIの変化(ビュー遷移やAlertなど)に対して、ドライブは良い選択のようです.
Reference
この問題について(RxSwift - Relay), 我々は、より多くの情報をここで見つけました https://velog.io/@leejinseong9410/RxSwift-Relayテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol