728x90
- Observable: 이벤트를 비동기적으로 처리하고 실시간 관찰
- Operator: Observable에 의해 방출되는 이벤트를 변환,처리
- Schedulers: DispatchQueue와 같음
- Subscribe: 생성된 Observable을 실행 시킨다.
let observable = Observable.of(1,2,3)
observable.subscribe({ event in
print(event)
})
/* Prints:
next(1)
next(2)
next(3)
completed
*/
위 코드를 다음과 같이 사용할 수도 있다.
let observable = Observable.of(1,2,3)
.subscribe(onNext: { num in
print(num)
}, onCompleted: {
print("completed")
})
- Disposing: subscribe와 반대로 Observable의 구독(실행)을 취소시킨다.
let observable = Observable.of(1, 2, 3)
let subscription = observable.subscribe({ num in
print(num)
})
subscription.dispose()
// 여러 Observable 취소 ->
// Disposable은 DisposeBag instance 의 deinit() 이 실행될 때 dispose()를 호출
let disposeBag = DisposeBag()
Observable.of(1, 2, 3)
.subscribe {
print($0)
}
.disposed(by: disposeBag)
- Create: Observable을 create로 만들 수 있다.여기서 .next(“2”) 의 경우 onComplete 이후이기 때문에 방출되지 않는다.
- .create는 escaping 클로저로 AnyObserver 를 인자로 받아 Disposable을 반환
let disposeBag = DisposeBag()
Observable<String>.create({ (observer) -> Disposable in
observer.onNext("1")
observer.onCompleted()
observer.onNext("2")
return Disposables.create()
}).subscribe(onNext: { print($0) },
onError: { print($0) },
onCompleted: { print("Completed") },
onDisposed: { print("Disposed") })
.disposed(by: disposeBag)
/* Prints:
1
Completed
Disposed
*/
- Subject: 실시간으로 Observable에 값을 추가하고 Subscriber에게 방출해줌
- PublishSubject: subscribe 후 이벤트 방출
- BehaviorSubject: publishSubject와 달리 초기 이벤트를 가지며, subscribe될 때 가장 최신의 next 이벤트 전달
- RelaySubject: buffersize개의 이벤트를 subscribe될 때 모두 방출
- throttle: 처음 이벤트가 방출될 때 타이머로 지정한 시간동안 방출하지 않는다
- 주로 버튼의 중복 입력을 방지하는데 사용된다.
- withLatestFrom: 2개의 Observable을 뒀을 때, 1번에서 방출이 되는 첫번 째 값은 두고 2번에서 방출되는 값을 1번에서 방출되는 두번 째 값과 결합하여 방출
출처:
https://rxmarbles.com/#withLatestFrom
https://velog.io/@iammiori/RxSwift-17.-withLatestFrom-%EC%A0%81%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0
https://ios-development.tistory.com/176
https://okanghoon.medium.com/rxswift-1-rxswift-%EC%9E%85%EB%AC%B8-67bfdbd91969
https://okanghoon.medium.com/rxswift-2-observable-subject-relay-8fcd9b01913d
728x90
댓글