#はじめに
今回は、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たのし〜