Swift - RxCocoa
RxCocoa
RxCocoaは、RxSwiftベースのライブラリであり、既存のCocoaフレームワークとRx機能を結合しています.
使用するにはRxSWIFTを別途追加する必要があります
RxCocoaは一方向性を有する
Producerは値を生成し、Consumerは値を処理します.
ObserverType,ObservableType
2つのタイプの性質を理解し、理解する必要があります.
2つのタイプの性質を理解し、理解する必要があります.
観測可能タイプ:観測可能値.
MobserverType:値を入力します.
Binder
まずbindを理解するにはBinderを理解しなければならない.
Binderは光ファイバタイプで3つの特徴があります.
bind
public func bind<Observer: ObserverType>(to observers: Observer...) -> Disposable where Observer.Element == Element {
self.subscribe { event in
observers.forEach { $0.on(event) }
}
}
bindはsubscribeと同様の機能といえる.実際のbind実装自体もsubscribeを用いる.
でもちょっと違う
RxSWIFT上のsubscribe
傍観者は、可視的に放出されたイベントを購読し、観察することができる.
RxCocoa bindは
ObserverとObserverの関係を組み合わせます.
コード差異
subscribe
tf.rx.text
.observe(on: MainScheduler.instance)
.subscribe(with: self , onNext: { ( _ , str ) in
self.lb.text = str
}).disposed(by: disposBag)
bind
tf.rx.text
.bind(to: lb.rx.text)
.disposed(by: disposBag)
Rxcocaを使用してUIを制御するメリットはさらに大きい.(可読性などにも差がある).また、値を注入することで循環参照を回避することもできる.
bindはバインド属性の値を受け入れて注入するので、メモリ構造の準備は必要ありません.
Traits
RxCocoaのTrait(UIを使用するときにユーザーがコードを簡単に直感的に作成し、使用できる特殊な観察可能クラスのセット)
errorを解放しない
MainSchedulerによって購読されます.
(スケジューラでThreadを指定する必要はありません)
信号を除いて、他の人はリソースを共有しています.
ControlProperty (ObservableType,ObserverType)
Subjectに似ています.
制御属性は制御属性タイプに合致し、制御属性タイプは観測可能タイプと観測可能タイプに合致する.
コントロールにデータをバインドします.(rx namespaceを使用)
errorを解放しません.
let blue = tf2.rx.text.orEmpty.map { $0.contains("파랑") }
blue
.distinctUntilChanged() //값이 변경될때만 방출
.subscribe(with: self,onNext: { _ , value in
self.lb.text = String(value)
}).disposed(by: disposBag)
ControlEvent( ObserverType )
MainSchedulerに転送します.
Observableロールを実行できません.
信号:Driverと似ていますが、リソースは共有されません.(信号はイベントモデリングに役立ち、ドライバはステータスモデリングに適しています.)
Dirver
エラーは転送されません.
スケジューラでThreadを変更しない限り、MainThreadで作業します.
共有は観測可能な共有のようなものです.
サブスクリプションに成功すると、最近発生したイベントが渡されます.
let result2 = Observable<Int>.of(Int.random(in: 11..<21))
.observe(on: MainScheduler.instance)
.catchAndReturn(100)
.map { String($0) }
.share()
result2
.subscribe(with:self,onNext: { _ , str in
self.lb.text = str
}).disposed(by: disposBag)
result2
.subscribe(with:self,onNext: { _ , str in
self.lb2.text = str
}).disposed(by: disposBag)
subscribeを使用する場合は、設定する必要があるものがたくさんあります. let result = Observable<Int>.of(Int.random(in: 11..<21))
.asDriver(onErrorJustReturn: 100)
.map { String($0) }
result
.drive(lb.rx.text)
.disposed(by: disposBag)
result
.drive(lb2.rx.text)
.disposed(by: disposBag)
Reference
この問題について(Swift - RxCocoa), 我々は、より多くの情報をここで見つけました https://velog.io/@leejinseong9410/RxSwift-RxCocoaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol