1. RxSwift의 목적
RxSwift, in its essence, simplifies developing asynchronous programs by allowing your code to react to new data and process it in sequential, isolated manner.
Functional programming에서 variable은 immutable 하다!
2. RxSwift 핵심 개념
1) Observable (= Sequence): Observables emit events(event는 값(value)라고 생각하면 됨) or errors
"event"라고 하는 것은 Observable이 가지고 있는 "값"이다. Observable을 생성하는 다양한 연산자가 있는데 (just, of, from 등) 상황에 맞추어서 알맞은 연산자를 사용해주면 된다.
let ob = Observable.just(1)
let ob2 = Observable.of(1,2,3)
let ob3 = Observable.of([1,2,3])
let ob4 = Observable.from([1,2,3,5,6,7,8,9])
Observable을 애플리케이션에서 어떻게 사용되는 것일까? 예를 들어서, 사용자가 UISlider를 움직이면 값이 변하게 된다. 이때 UISlider가 observable이 될 수 있다. 그렇게 되면 필요한 곳에서 UISlider에서 나오는 값을 subscribe하여 변하는 값을 받아볼 수 있다.
2) Subscribe: observable이 emit하는 값을 구독하는 행위
- subscribe() 메서드를 사용하면 event 자체를 구독하게 된다.
ob4.subscribe { event in
print(event)
}
//Prints
next(1)
next(2)
next(3)
next(5)
next(6)
next(7)
next(8)
next(9)
completed
그렇기 때문에 값만 받고 싶다면 if let과 같이 optional binding을 해주어야 한다.
ob4.subscribe { event in
if let ele = event.element {
print(ele)
}
}
//Prints
1
2
3
5
6
7
8
9
- subscribe(onNext:) 메서드를 사용하면 event 의 element를 구독하게 된다.
값만 원하는 경우에는 onNext를 사용해주면 되겠다.
ob4.subscribe(onNext: { ele in
print(ele)
})
//Prints
1
2
3
5
6
7
8
9
3) Dispose: Memory leak을 막기 위한 용도. Subscriber는 항상 자신이 subscribe하고있는 observable의 변화를 감지하기 위해 observable을 listening하고 있다. 그렇기 때문에 memory leak이 발생할 수 있어서 dispose 해주는 것이 필요하다!
let sub4 = ob4.subscribe(onNext: { ele in
print(ele)
}).dispose()
subscriber에 dispose 메소드를 사용해주면 된다.
dispose를 할 수 있는 또 다른 방법에는 DisposeBag을 이용하는 방법이 있다.
//DisposeBag 인스턴스 생성
let disposeBag = DisposeBag()
Observable.of("A", "B", "C")
.subscribe {
print($0)
}
.disposed(by: disposeBag)
'Swfit > RxSwift' 카테고리의 다른 글
RxSwift와 RxCocoa의 차이점 (0) | 2023.01.01 |
---|---|
RxSwift-Observable, Subject, Relay 알아보기 (0) | 2022.11.19 |
RxSwift-Operator 종류 알아보기: Interval (0) | 2022.11.18 |