반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 다크모드
- WebView
- Realtime Database
- 라이트모드
- RxSwift
- autolayout
- swipe
- Swift
- ios
- remote config
- UITabBarController
- subscript
- github
- Firebase
- SwiftUI
- LazyHStack
- Java
- SwiftLint
- UIButton
- dictionary
- string
- NavigationLink
- gcd
- Alamofire
- 웹뷰
- 문자열
- UIScrollView
- Android
- Apple
- Observable
Archives
- Today
- Total
점진적 과부하 개발 블로그
RxSwift Subject 알아보기 본문
반응형
RxSwift Subject 알아보기
Subject
- Observable이자 Observer
Subject의 종류
- PublishSubject
- 빈 상태로 시작하여 새로운 값만을 subscriber에 방출한다.
- BehaviorSubject
- 하나의 초기값을 가진 상태로 시작하여, 새로운 subscriber에게 초기값 또는 최신값을 방출한다.
- ReplaySubject
- 버퍼를 두고 초기화하며, 버퍼 사이즈 만큼의 값들을 유지하면서 새로운 subscriber에게 방출한다.
PublishSubject
- 구독된 순간 새로운 이벤트 수신을 알리고 싶을 때 유용하다.
- 아래로 향하는 화살표는 구독을 의미하고 위로 향하는 화살표는 방출을 의미한다.
import RxSwift
let disposedBag = DisposeBag()
print("------PublishSubject------")
let publishSubject = PublishSubject<String>()
publishSubject.onNext("1안뇽하세요~")
let 구독자1 = publishSubject.subscribe(onNext: {
print("첫번째 구독자 : \($0)")
})
publishSubject.onNext("2Do you hear me?")
publishSubject.on(.next("3Nope"))
구독자1.dispose()
let 구독자2 = publishSubject
.subscribe(onNext: {
print("두번째 구독자 : \($0)")
})
publishSubject.onNext("4모시모시")
publishSubject.onCompleted()
publishSubject.onNext("5??")
구독자2.dispose()
publishSubject
.subscribe {
print("세번째 구독:", $0.element ?? $0)
}
.disposed(by: disposedBag)
publishSubject.onNext("6이거가능?")
BehaviorSubject
- 마지막 Next 이벤트를 새로운 구독자에게 반복하는 점만 빼면 PublishSubject와 유사하다.
- 첫번째 줄이 BehaviorSubject이고 아래는 구독자들이다.
- 직전의 값들을 항상 받는다.
print("----behaviorSubject----")
enum SubjectError: Error {
case error1
}
// 반드시 초기값을 가진다.
let behaviorSubject = BehaviorSubject<String>(value: "초기값")
behaviorSubject.onNext("1. 첫번째값")
behaviorSubject.subscribe {
print("첫번째 구독 :", $0.element ?? $0)
}
.disposed(by: disposedBag)
behaviorSubject.onError(SubjectError.error1)
behaviorSubject.subscribe {
print("두번째 구독", $0.element ?? $0)
}
.disposed(by: disposedBag)
ReplaySubject
- 서브젝트를 생성할 때 선택한 특정크기까지 방출하는 최신요소를 일시적으로 버퍼로 둔다.
- 구독자가 생길때 마다 방출을 한다.
- 버퍼를 가지고 있게하는건 좋지만 너무 큰 형태의 버퍼를 가지는건 좋지않다.
print("-----ReplaySubject-----")
let replaySubject = ReplaySubject<String>.create(bufferSize: 2) // 몇개의 버퍼를 가질것인지 선언
replaySubject.onNext("1 이게")
replaySubject.onNext("2 ReplaySubject")
replaySubject.onNext("3 인가요?")
replaySubject.subscribe {
print("첫번째 구독 :", $0.element ?? $0)
}
.disposed(by: disposedBag)
replaySubject.subscribe {
print("두번째 구독", $0.element ?? $0)
}
.disposed(by: disposedBag)
replaySubject.onNext("4 신기하네요")
replaySubject.onError(SubjectError.error1)
replaySubject.dispose()
replaySubject.subscribe {
print("세번째 구독자", $0.element ?? $0)
}
.disposed(by: disposedBag)
반응형
'RxSwift' 카테고리의 다른 글
RxSwift Transforming Operator (0) | 2022.05.18 |
---|---|
RxSwift Filtering Operator (0) | 2022.05.17 |
RxSwift Single, Maybe, Completable 알아보기 (0) | 2022.05.15 |
RxSwift Observable 알아보기 (0) | 2022.05.12 |
RxSwift 설치하기 (0) | 2022.05.11 |