clamp
Clamp
clamp
글쓰기 관리
전체 방문자
오늘
어제
  • 분류 전체보기 (509)
    • IOS (85)
    • SwiftUI+TCA+Combine (9)
    • RxSwift + MVVM (56)
    • Clean Architecture (12)
    • SWIFT (56)
    • iOS - TDD (2)
    • 디자인패턴 (4)
    • CS (56)
      • 알고리즘 (29)
      • 운영체제 (15)
      • 자료구조 (2)
      • 네트워킹 (4)
      • 기타 (6)
    • 회고 (0)
    • Firebase (18)
    • SwiftUI (10)
    • iOS - UIKit (11)
    • iOS - 오픈소스 (6)
    • 코딩테스트 (166)
      • 프로그래머스 (164)
    • 정보처리기사 (14)
    • GitHub (2)
글쓰기 / 관리자

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Swift
  • Q
  • uikit
  • ㅅ

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

RxSwift + MVVM

RxSwift(10). ReplaySubject

2023. 2. 17. 12:12

두개이상의 이벤트를 저장해두고 새로운 구독자로 전달하고 싶다면 ReplaySubject를 사용한다.

 

ReplaySubject는 생성자가 아닌 create메서드로 생성한다.

그리고 버퍼의 사이즈를 전달하는데 N을 입력하면 N개의 이벤트를 저장한다.

 

let rs = ReplaySubject<Int>.create(bufferSize: 3)

(1...10).forEach{ rs.onNext($0)}

rs.subscribe{ print("Observer1 >> ", $0)}
.disposed(by: disposeBag)

//Observer1 >>  next(8)
//Observer1 >>  next(9)
//Observer1 >>  next(10)

3개의 next가 나온 이유는 버퍼의 크기를 3으로 지정했기 때문.

버퍼에는 마지막에 전달된 3개가 저장된다.

또한 이 3개의 이벤트가 NextEvent로 전달된다.

 

버퍼는 메모리에 저장되기 때문에 항상 메모리 관리에 신경 써야한다.

 

필요이상으로 큰 버퍼를 사용하는 것은 피해야한다.

 

let rs = ReplaySubject<Int>.create(bufferSize: 3)

(1...10).forEach{ rs.onNext($0)}

rs.subscribe{ print("Observer1 >> ", $0)}
.disposed(by: disposeBag)

rs.subscribe{ print("Observer2 >> ", $0)}
.disposed(by: disposeBag)

rs.onNext(11)

rs.onCompleted()

rs.subscribe{ print("Observer1 >> ", $0)}
.disposed(by: disposeBag

//Observer1 >>  next(8)
//Observer1 >>  next(9)
//Observer1 >>  next(10)
//Observer2 >>  next(8)
//Observer2 >>  next(9)
//Observer2 >>  next(10)
//Observer1 >>  next(11)
//Observer2 >>  next(11)
//Observer1 >>  completed
//Observer2 >>  completed
//Observer1 >>  next(9)
//Observer1 >>  next(10)
//Observer1 >>  next(11)
//Observer1 >>  completed

completedEvent를 전달하게 되면 버퍼에 저장된 개수만큼의 마지막 이벤트가 전달되고 

CompletedEvent가 전달된다.

ErrorEvent 또한 같다

 

ReplaySubject는 종료의 여부와 관계없이 항상 저장된 이벤트를 새로운 구독자에게 전달한다.

저작자표시 비영리 동일조건 (새창열림)
    'RxSwift + MVVM' 카테고리의 다른 글
    • RxSwift(12). Relays
    • RxSwift(11). AsyncSubject
    • RxSwift(9). BehaviorSubject
    • RxSwift(9). PublishSubject
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바