【RxSwift】イベントをenumに変える便利なオペレータがあった
イベントをenumに変える便利なオペレータがあったことを最近知ったので、メモしておきます👷♀️
.materialize()
.materialize()
は、ストリームに流れる各イベントを、それぞれEvent
というenumに変換します。
@frozen public enum Event<Element> { /// Next element is produced. case next(Element) /// Sequence terminated with an error. case error(Error) /// Sequence completed successfully. case completed }
つまり、下記のようにObservable
をハンドリングすることができます。
let text: Observable<String> = Observable.create { observer in observer.onNext("a") observer.onNext("b") observer.onNext("c") observer.onCompleted() return Disposables.create() } text .materialize() .subscribe(onNext: { event in switch event { case .next(let text): // Next handle. case .error(let error): // Error handle. case .completed: // Completed handle. } }) .disposed(by: disposeBag)
.dematerialize()
.dematerialize()
は、Event<Element>
型になったストリームを元の状態に戻します。例えば、Observable<Event<String>>
を.dematerialize()
するとObservable<String>
に戻ります。
てな感じで本日も以上となります🍺