1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【RxSwift】RxSwift Traitsを知る

Last updated at Posted at 2021-09-25

#はじめに
今回は、Single, Completable, Maybeについてまとめます。いわゆる、RxSwift Traitsと呼ばれるものですね。

#Single
Singleは値またはエラーのいずれか一方を返す(流す)ことが保証されているObservableのようなものです。
使う場面の例としては、
・APIから値を要求し、取得する
・DBから値を取得する
・画像が読み込まれたときに、操作する
などなど

func readAll() -> Single<[Record]> {
    return Single.create { observer in
        if isSuccess {
            observer(.success(records))
        } else {
            observer(.failure(error))
        }
    }
    return .just(dataStore.readAll())
}

さらに、純粋なObservableは.asSingle()を用いることで変換できます。

#Completable
Completableはエラーまたは完了を流すことが保証されています。
Observable<Void>と同値です。
使う場面の例としては、
・DBに値を保存するなど、操作後に値の返却をする必要がないとき
・ログイン処理
・Twitterに投稿など

func login(email: String,
           password: String) -> Completable {
    return Completable.create { observer in
        self.dataStore.login(email: email,
                             password: password) { result in
            switch result {
                case .success:
                    return observer(.completed)
                case .failure(let error):
                    return observer(.error(error))
            }
        }
        return Disposables.create()
    }
}

Single同様に、純粋なObservableはasCompletableを使うことでCompletableに変換できます。
さらに、Completableで完了を表すにはCompletable.empty()を使います。

#Maybe
Maybe = Completable + Singleというイメージです。値、完了、エラーを流します。

func generateString() -> Maybe<String> {
    return Maybe<String>.create { maybe in
        maybe(.success("RxSwift"))
        maybe(.completed)
        maybe(.error(error))
        return Disposables.create()
    }
}

使う場面の例としては、
・DBから取得した値を流すことが多い
・DB内に値があれば成功、なければ完了、エラー発生時は失敗、という3パターンで都合がいいため
さらに、純粋なObservableは.asMaybe()を用いることで変換できます。

#おわりに
RxSwiftたのし〜

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?