You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
letdisposeBag=DisposeBag()letsubject=PublishSubject<String>()letbufferedObserver= subject.replay(2)
bufferedObserver.connect()
subject.onNext("이전 방출: 0")
subject.onNext("이전 방출: 1")
subject.onNext("이전 방출: 2")
bufferedObserver
.subscribe(onNext:{print($0)}).disposed(by: disposeBag)
subject.onNext("이후 버퍼와 관계없이 방출")
subject.onNext("이후 버퍼와 관계없이 방출")
subject.onNext("이후 버퍼와 관계없이 방출")
/* Prints:
이전 방출: 1
이전 방출: 2
이후 버퍼와 관계없이 방출
이후 버퍼와 관계없이 방출
이후 버퍼와 관계없이 방출
*/
2. buffer() - 시간과 용량으로 통제 가능한 버퍼
버퍼의 전체용량(full capacity)에 다다랐을 때, 또는 제한 시간(deadline)에 다다랐을 때
받은 요소들을 array 형태로 즉시 방출
source observable에서 받을 것이 없으면, 일정 간격으로 빈 array를 방출
어떤 application이든 timer를 필요. iOS와 macOS에는 이에 대해 다양한 솔루션들이 존재
통상적으로 NSTimer가 해당 작업을 수행
혼란스러운 소유권 모델을 가지고 있어 적절한 사용이 어려웠다.
최근에는 dispatch 프레임워크가 dispatch 소스를 통해 타이머를 제공
확실히 + NSTimer보다는 나은 솔루션이지만, API는 여전히 랩핑 없이는 복잡
RxSwift는 간단하고 효과적인 timer솔루션을 제공
1. Observable.interval()
일정하게 전송된 Int값의 무한한 observable을 생성
손쉽게 dispose()로 취소할 수 있다. 구독이 취소된다는 것은 즉 타이머를 멈춘다는 것을 의미
Observable.interval(_:scheduler:)를 통해 방출된 값은 0부터 시작한다. 다른 값이 필요하다면, map(_:)을 이용
Ch.11 Time Based Operators
A. Buffering operators
1. replay(), replayAll() - 과거 요소 리플레이
2. buffer() - 시간과 용량으로 통제 가능한 버퍼
3. window() - 시간과 용량으로 통제 가능한 버퍼
B. Time-shifting operators
1. delaySubscription() - 구독 지연
2. delay() - 구독 sequence를 뒤로 미루어 받기
C. Timer operators
1. Observable.interval()
일정하게 전송된 Int값의 무한한 observable을 생성
손쉽게 dispose()로 취소할 수 있다. 구독이 취소된다는 것은 즉 타이머를 멈춘다는 것을 의미
Observable.interval(_:scheduler:)를 통해 방출된 값은 0부터 시작한다. 다른 값이 필요하다면, map(_:)을 이용
2. Observable.timer()
3. Timeout
5초 이내로 클릭하지 않으면 error 발생, 클릭 시 이벤트 발생
The text was updated successfully, but these errors were encountered: