Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- UICollectionView
- swift documentation
- 리펙토링
- swiftUI
- ribs
- UITextView
- uitableview
- tableView
- clean architecture
- HIG
- 애니메이션
- Protocol
- ios
- SWIFT
- Refactoring
- Clean Code
- Human interface guide
- 스위프트
- map
- Xcode
- uiscrollview
- collectionview
- combine
- MVVM
- 리팩토링
- Observable
- 클린 코드
- rxswift
- RxCocoa
- 리펙터링
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] RxSwift의 Observable, Single, Completable 구분하여 사용하기 본문
iOS 응용 (swift)
[iOS - swift] RxSwift의 Observable, Single, Completable 구분하여 사용하기
jake-kim 2023. 2. 6. 22:39Single, Completable 차이
- Single과 Completable 차이
- Single은 onSuccess, onError 두 가지만 존재하고, success에서 값을 같이 방출
- Completable은 onCompletable, onError 두 가지만 존재하고, 따로 값을 방출 x
- 값을 단순히 가져오거나 특정 일을 한 후 반환값이 필요 없는 경우, Single<Void> 대신에 Completable을 사용할 것
import UIKit
import RxSwift
class ViewController: UIViewController {
let observable = Observable<Int>.create { observer in
observer.onNext(10)
print("finish")
return Disposables.create()
}
let single = Single<Int>.create { observer in
observer(.success(1)) // 또는 observer(.error())
return Disposables.create()
}
let completable = Completable.create { observer in
observer(.completed) // 또는 observer(.error())
return Disposables.create()
}
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
single
.debug("debug1>")
.subscribe()
.disposed(by: disposeBag)
// subscribed > next(1) > completed > isDisposed
completable
.debug("debug2>")
.subscribe()
.disposed(by: disposeBag)
// subscribed > completed > isDisposed
}
}
Observable과 Single, Completable 차이
- Single과 Completable은 한 번 subscribe하고 이벤트가 방출되면 바로 dispose되어 1회성으로 사용할 때 사용
- 주로 API 통신 할 때 Single과 Completable 활용
- Observable은 한 번 subscribe하면 이벤트가 방출되더라도 dispose되지 않고 스트림을 계속 subscirbe하고 있는 상태
ex) observable을 subscribe할 때 next이벤트가 발생해도 dispose 되지 않음
private func getSomeObservable() -> Observable<Int> {
.create { observer in
observer.onNext(1)
return Disposables.create()
}
}
getSomeObservable()
.debug("debug0>")
.subscribe()
.disposed(by: disposeBag)
// subscribed > next(1)
정리
- 계속 observe하여 이벤트가 발생할 때마다 특정 작업을 처리해야하는 경우? (상태 바인딩 후 UI 변경하는 경우)
- Observable사용
- 필요할때마다 호출하여 특정 작업을 하고싶은 경우? (API 통신, 등등)
- Single이나 Completable 사용
- Single과 Completable
- 반환값이 필요 없는 경우(사용자 정보 업데이트 API 호출 등) - Completable
- 반환값이 필요한 경우(사용자 정보 얻어오기 API 호출 등) - Single
* 전체 코드: https://github.com/JK0369/ExSingle
'iOS 응용 (swift)' 카테고리의 다른 글
Comments