iOSエンジニアのつぶやき

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

【RxSwift】Observableエラーの取り回しをちょっと便利にする

本日はRxSwift CommunityActionライブラリを使った、便利なObservableエラーの取り回しについて簡単に紹介したいと思います👷‍♀️

github.com

こんな時どうする?

Observableで流れてくるErrorを取得したいけど、Errorが流れてきた場合にストリームを中断したくない場合って結構ありますよね?そんな時、いつも僕は下記のようにResultを使い、ストリームにErrorイベントを流していました。

    func hogeRequest() -> Observable<Result<String, Error>> {
        return .just(.success("hoge"))
    }

    func bind() {
        hogeRequest()
            .subscribe(onNext: { result in
                switch result {
                case .success(let hoge):
                    // TODO: Success handle.
                case .failure(let error):
                    // TODO: Error handle.
                }
            }) // ErrorはonNextに内包される
            .disposed(by: disposeBag)
    }

そんな、Error処理分けがActionを使うことで、下記のようにシンプルに分けて書くことができます✍️

    func hogeRequest() -> Action<Void, String> {
        return .init { .just("") }
    }

    func bind() {
        let hogeRequest = hogeRequest()

        hogeRequest
            .elements
            .subscribe(onNext: { hoge in
                // TODO: Success handle.
            })
            .disposed(by: disposeBag)

        hogeRequest
            .errors
            .toError()
            .subscribe(onNext: { error in
                // TODO: Error handle.
            })
            .disposed(by: disposeBag)
    }

まだ使いこんでなく、わからない部分も多いので、またガッツリ使う機会があったら記事にしたいと思います👩‍🌾 てな感じで本日も以上となります🍺

参考

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com