iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

【RxSwift】イベントをenumに変える便利なオペレータがあった

イベントをenumに変える便利なオペレータがあったことを最近知ったので、メモしておきます👷‍♀️

reactivex.io

.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>に戻ります。

てな感じで本日も以上となります🍺

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com