1) Single : 성공이냐, 실패냐를 따지는 one-time 일에 적합 (ex: 파일 다운로드, 디스크로딩)
typealias SingleEvent<Element> = Result<Element, Swift.Error>
2) Completable : single과 유사하지만 value를 emit하지 않음.
즉, 일이 제대로 됐는지만 검토할 때 사용 (ex: 파일 쓰기, alert)
enum CompletableEvent { case error(Swift.Error) case completed }
3) Maybe : Single + Completable
enum MaybeEvent<Element> { case success(Element) case error(Swift.Error) case completed }
※ success와 completed의 차이점
- completed는 성공하지 못해도 언제나 호출되지만, success는 어떤 일을 성공적으로 마친 경우만 호출
- completed는 value를 emit하지 않음. 즉, success(value) == next(value) + completed