Notice
Recent Posts
Recent Comments
Link
study record
[RxSwift] Observable이란? 본문
Observable
여러 이벤트들을 방출(=”emit”)할 수 있는 대상
emit : 이벤트를 계속해서 비동기적으로 생성하는 기능
sequence란?
Observable = Observable sequence = sequence
Observable 이벤트들은 sequence라고 할 수 있다.
이벤트의 종류
next
- 구성 요소를 계속해서 방출할 수 있는 기능 (= observable 구독자에게 데이터 전달)
completed
- 성공적으로 next이벤트가 완료되었을 때 발생하며, 이벤트를 종료시킨다. (= observable 구독자에게 완료되었음을 알림)
error
- 이벤트에 오류가 있음을 알고 중간에 스트림을 종료시킬 수 있는 기능 (observable 구독자에게 오류를 알린다.)
API.download(file: "<http://www>...")
.subscribe(onNext: { data in
... append data to temporary file
},
onError: { error in
... display error to user
},
onCompleted: {
... use downloaded file
})
- error, complete가 발생한 상황에 모두 Dispose가 호출되고 스트림 종료된다.
- onDisposed: 시컨스가 버려진 경우 호출된다.
- Observable 타입들은 모두 Disposable 타입을 반환한다. 이 값을 이용해 스트림을 종료시키고 작업을 종료한다.
- 구독자는 방출하는 이벤트를 전달받고 각 상황에 따라 액션을 취한다.
Subscribe
- 이벤트에 대한 처리
- 필요한 이벤트에 대해서만 골라서 처리할 수 있다.
- 이벤트에 대한 처리를 클로저 내부에서 진행한다. 따라서 약한 참조를 꼭 해서 메모리 누수를 방지해야 한다. (클로저 내부에서 self를 참조하는 경우에만 해당)
- .subscribe는 정수의 이벤트 객체를 파라미터로 하는 escaping 클로저 형식 메소드, 반환값은 Disposable이다.
dispose
- subscribe를 취소하는 것
- 구독을 취소하고 종료한다는 의미의 메서드
- Observable의 이벤트가 dispose()에서 종료된다.
- disposeBag : dispose에 대한 리턴 값을 담는 객체.
- 각각의 구독에 대해 일일이 관리하는 것은 호율적이지 못하기 때문에 Disposable들을 모아놨다가 한 번에 처분하는 방식
- 모든 순서에 대한 사용 완료 후에는 dispose를 호출하여야 정상적으로 구독 취소와 동시에 메모리가 해제된다.
example(of: "DisposeBag") {
let disposeBag = DisposeBag()
Observable.of("A", "B", "C")
.subscribe{
print($0)
}
.disposed(by: disposeBag) // subscribe로부터 방출된 리턴 값을 disposeBag에 추가
print(disposeBag)
// prints : RxSwift.DisposeBag
}
참고
'iOS > RxSwift' 카테고리의 다른 글
[RxSwift] Rx Operators (What i frequently used) (0) | 2022.09.04 |
---|---|
[RxSwift] Scheduler란? (0) | 2022.08.07 |
Reactive Programming이란? (0) | 2022.07.17 |
[RxSwift] Driver란? (0) | 2022.03.29 |
[RxSwift] Subject와 Relay (0) | 2022.03.14 |