[RxSwift] Time Based Operators

Judy·2023년 3월 16일
0

RxSwift

목록 보기
6/6
post-thumbnail

fimuxd/RxSwift를 참고해 정리하는 글입니다 🙂


시간의 흐름에 따라 데이터가 변동되는 것을 확인하기

Connect

Connectable한 Observable이 구독자에게 item을 방출하도록 함



Replay

Observable이 방출을 시작한 후 구독하더라고 모든 observer가 방출된 시퀀스를 볼 수 있도록 합니다.

  • Connect 연산자가 적용된 경우에만 사용 가능
  • replay(1) - buffer의 크기(보여준 이전 item 개수)를 지정해줌
let observable = Observable<Int>
		.interval(.seconds(1), scheduler: MainScheduler.instance)
		.replay(3)
	
observable.connect()

observable.subscribe(onNext: { num in
	print("First Num is \(num)")
}).disposed(by:disposeBag)

observable.delaySubscription(.seconds(4), scheduler: MainScheduler.instance)
	.subscribe(onNext: { num in
		print("Second Num is \(num)")
	}).disposed(by:disposeBag)

replayAll

  • replay와 동일하지만 buffer가 무제한
  • 메모리를 막히게 할 수 있으므로 버퍼할 요소의 개수를 정확히 알고 있을 때만 사용

Buffer

Observable이 방출하는 item을 주기적으로 수집하고 item이 아닌 번들로 방출

  • item을 방출하는 Observable에서 버퍼된 collection을 방출하는 Observable로 변환
  • error가 발생하면 수집 중인 버퍼를 방출하지 않고 바로 error를 전달
  • buffer(timeSpan:cout:scheduler:)
    • timeSpan: buffer의 최대 시간 길이
    • count: buffer가 최대로 수집할 수 있는 item의 수
    • scheduler: buffer 타이머를 실행하는 스케쥴러

  • timeSpan이 되기 전 count가 모두 차면 방출하고 타이머를 다시 초기화
    buffer

Window

window는 buffer와 유사하지만 item을 다시 방출하기 전 데이터 구조가 아닌 별도의 Observable로 수집

  • 수집한 item을 담은 Observable을 방출
    • 방출한 Observable은 item을 방출한 후 onCopmleted로 종료
    • Buffer - Observable<[Element]>, Window - Observable<Observable<Element>>
    • flatMap 연산자와 함께 사용될 수 있음

window

Delay

특정 양만큼 Observable에서 방출을 지연



delaySubscription

  • 원본 Observable에서 방출을 지연하는 것이 아니라 구독 순간을 지연

Interval

주어진 시간 간격으로 일련의 정수를 방출하는 Observable

  • 일정 시간 간격으로 무한한 오름차순 정수 시퀀스를 방출하는 Observable을 반환

Timer

주어진 만큼 지연 후에 특정 item을 방출하는 Observable을 생성

  • 지정한 시간 이후 하나의 특정 item을 방출하고 종료

Timeout

원본 Observable을 미러링하지만 방출된 항복 없이 특정 기간이 경과하면 오류를 방출




reactivex.io-operators

profile
iOS Developer

0개의 댓글