RxSwift 3.3.0でRxJavaにインスパイアされた Single
、Maybe
、Completable
が追加されたので、使い所をかんがえて見た。
Single
性質
The 2.x Single reactive base type, which can emit a single onSuccess or onError has been redesigned from scratch.
1度だけ onSuccsess
または onError
が流れる。 onComplete
、 onNext
は流れない点に注意
public enum SingleEvent<Element> {
/// One and only sequence element is produced. (underlying observable sequence emits: `.next(Element)`, `.completed`)
case success(Element)
/// Sequence terminated with an error. (underlying observable sequence emits: `.error(Error)`)
case error(Swift.Error)
}
使い所
- レスポンスのあるAPIリクエスト
- プロミス的な使い方
- FirebaseのsingleEvent
Completable
性質
1度だけ 、onComplete
または onError
が流れる。
public enum CompletableEvent {
/// Sequence terminated with an error. (underlying observable sequence emits: `.error(Error)`)
case error(Swift.Error)
/// Sequence completed successfully.
case completed
}
使い所
- レスポンスボディの無いAPIリクエスト
Maybe
性質
Conceptually, it is a union of Single and Completable providing the means to capture an emission pattern where there could be 0 or 1 item or an error signalled by some reactive source.
SingleとCompleteが合わさったような性質。
1度だけ、アイテムかerrorが流れるか、または全くイベントが流れない。
(実装の際にはイベントが流れてこないことがある点も考慮が必要)
使い所
- 1回だけ表示したいイベントの条件とか?
所感
今までは1度しか流れてこないイベントもObservableで流しっぱなしで、
Sigle、Completableと1回しか流れてこないように明示的にできるのはとても良いなー( ˘ω˘)
参考
Release Hashimoto · ReactiveX/RxSwift
What's different in 2.0 · ReactiveX/RxJava Wiki
ReactiveX - Single