Observables aka Sequences
2023. 9. 5. 18:10ㆍSwift/RxSwift
반응형
RxSwift/Documentation/GettingStarted.md at main · ReactiveX/RxSwift
- 해당 내용은 RxSwift의 공식 깃허브의 내용을 바탕으로 작성한 글입니다.
- 번역이나 이해가 부족하여 틀린 내용이 있을 수 있습니다.
Basics
- 옵저버 패턴(
Observable<Element> sequence
)와 일반적인 시퀀스는 Rx를 이해하는데 매우 중요한 요소입니다. - 모든
Observable
시퀀스는 정말로 시퀀스입니다. (Observable == Sequence) - 스위프트
Sequence
와Observable
은 비동기적으로 요소들을 받을 수 있습니다.Observable(ObservableType)
은Sequence
와 동일하다.ObservableType.subscribe
의 메소드는Sequence.makeIterator
메서드와 동일하다.Observer
은 시퀀스 요소들에서next()
를 통해 요소들을 받기보다는ObservableType.subscribe
메소드를 통하는것이 필요하다.
- 숫자들의 시퀀스
``` - -1--2--3--4--5--6--| // terminates normally
- 문자열 시퀀스(에러가 포함)
``` - -a--b--a--a--a---d---X // terminates with error
- 버튼 시퀀스
``` - --tap-tap-------tap--->
- 숫자 혹은 문자열 시퀀스와 같이 유한할 수 있는 시퀀스도 있지만 버튼 시퀀스와 같이 무한한 시퀀스도 존재합니다.
- 위 표시를 우리는 marble diagrams(마블 다이어그램)이라고 부릅니다.(Interactive diagrams of Rx Observables)
- 만약 우리는 특정 시퀀스 문법을 정규식으로 포현하면 다음과 같다.
next (error | completed)?
- 위 설명은 다음을 따른다.
- 시퀀스는 0개 이상의 요소를 가진다.
error
혹은completed
이벤트를 받았을 때 시퀀스는 더이상의 요소들을 생성할 수 없다.
- Rx내의 시퀀스는 push interface(콜백)으로 설명된다.
enum Event<Element> {
case next(Element) // next element of a sequence
case error(Swift.Error) // sequence failed with error
case completed // sequence terminated successfully
}
class Observable<Element> {
func subscribe(_ observer: Observer<Element>) -> Disposable
}
protocol ObserverType {
func on(_ event: Event<Element>)
}
- 시퀀스가 completed 또는 error를 보내면 시퀀스 요소를 계산하는 모든 내부 리소스가 해제됩니다.
dispose
를 호출하거나 사용하지 않는다고 메모리 누수가 일어나는 것은 아닙니다. 그러나, 시퀀스가 완료될 때까지 쭉 사용될 것이다.dispose
혹은disposeBag
을 사용하는 것은 메모리를 효과적으로 관리하는 방법입니다.
반응형
'Swift > RxSwift' 카테고리의 다른 글
How to run tests in RxSwift 및 적용해보기 (1) | 2023.11.28 |
---|---|
Creating your own Observable (aka observable sequence) && Creating an Observable that performs work (0) | 2023.09.08 |
Disposing && Implicit Observable guarantees (0) | 2023.09.07 |
RxSwift 왜 사용할까? (0) | 2023.08.31 |