sequence = observable
얘네들은 기본적으로 값을 방출할 수 있다
subscribe 가능하고, 해당 event를 얻을 수 있다는 것
ex. 슬라이더 컨트롤이 있는 경우 슬라이더 컨트롤의 값을 구독할 수 있다고 가정
누군가 슬라이더를 움직일 때마다 업데이트된 값을 얻을 수 있다.
업데이트된 값을 얻기 위해 관찰 가능.
객체를 하나씩 만들어보면
let observable = Observable.just(1)
하나의 특정 요소를 관찰 가능 항목을 만드려는 변수.
let observable2 = Observable.of(1,2,3)
함수가 아닌 다른 배열이나 요소를 관찰 가능한 항목으로 만들 수 있다.
let observable3 = Observable.of([1,2,3])
배열을 관찰 가능한 항목으로 만들 수 있다.
let observable4 = Observable.from([1,2,3,4,5])
Observable.of와 Observable.from의 차이점은
of는 관찰가능 항목이 배열자체에 작동 / 전달하는 모든 항목 자체를 관찰 가능
from은 관찰 가능항목이 개별 요소에 대하여 작동 / 요소 각각 관찰 가능
subscribe하는법
subscribe를 하게 되면 값이나 변수에 액세스 할 수 있다
observable4를 subscribe해보면
observable4.subscribe { event in
print(event)
}
이런 값을 얻을 수 있는데
이것은 값이나 배열의 내용이 무엇이든
실제가 아니다
1. event를 가져오고
2. event안에는 값이 포함돼 있음
그렇다면 우리는 어떻게 진짜 값을 얻을 수 있을까?
element를 사용해서 하나하나를 얻어내자
observable4.subscribe { event in
if let element = event.element {
print(element)
}
}
결과는
만약 obervable.of로 값을 subscribe하려고 하면
observable3.subscribe { event in
print(event)
}
한번에 모든 값을 얻을 수 있다
element로 구성요소를 print해보면
전체 구성요소를 print하는 것을 볼 수 있다
onNext를 사용하면 더 쉽게 unwraping하지 않고 엑세스할 수 있다
observable4.subscribe(onNext: { element in
print(element)
})
dispose(폐기)
subscribe - dispose는 묶어서 생각하자
dispose하지 않으면 메모리의 누수(memory leak)가 생길 수 있다.
let subscription4 = observable4.subscribe(onNext: { element in
print(element)
})
subscription4.dispose()
disposebag 만들기
특정 observable개체를 처리할 수 있는데
관찰이 완료되는 시점에서 dispose 할 수 있다.
Observable.of("A", "B", "C")
.subscribe {
print($0)
}.disposed(by: disposeBag)
create를 활용하여 subscribe하기
아래와같이 create를 사용하여 추적하게되면
Observable<String>.create { observer in
observer.onNext("A")
observer.onCompleted()
observer.onNext("B")
return Disposables.create()
}.subscribe(onNext: { print($0) }, onError: { print($0) }, onCompleted: {print("Completed") }, onDisposed: {print("Disposed") } )
.disposed(by: disposeBag)
A를 생성하여 추적하고
onCompleted()명령을 하면, 이미 완료된 상태이므로 B를 생성하여도 출력하지 않는다.
'iOS > RxSwift' 카테고리의 다른 글
[RxSwift] Combining Operators (1) | 2022.11.02 |
---|---|
[RxSwift] Transforming Operator(ToArray, Map, FlatMap, FlatMapLatest) (0) | 2022.11.01 |
[RxSwift] Filtering Operator (0) | 2022.10.27 |
[RxSwift] Subject에 관하여 (0) | 2022.10.25 |