반응형
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
- ios14
- RFC1738/1808
- init?
- Xcode
- NullObject
- graphql
- @State
- vim
- operator
- SWIFT
- SwiftUI
- @Binding
- typeorm
- Creating Operators
- IOS
- Bug
- URL(string:)
- NavigationLink
- swift6
- subject
- Operater
- Operators
- RxSwift
- @EnvironmentObject
- dismiss
- RxCocoa
- @Environment
- init
- nestjs
- nonisolated
Archives
- Today
- Total
Tunko Development Diary
RxSwift) PublishSubject 란? 본문
PublishSubject의 가장큰 특징은 옵저버의 구독 이후에 이벤트를 받을 수 있습니다.
let disposeBag = DisposeBag()
enum PublishSubjectError: Error {
case error
}
// String타입을 받는 PublishSubject 생성
let subject = PublishSubject<String>()
subject.onNext("구독전")
먼저 subject는 옵저버와 옵저버블의 기능을 동시에 가지고 있습니다. 그래서 이벤트를 넘겨줄수 있습니다.
위 코드처럼 구독전에 subject에서 onNext 이벤트를 넘기면 아무런 이벤트도 받을 수 없습니다.
이후에 구독 코드를 추가해 줍니다.
let subject = PublishSubject<String>()
subject.onNext("구독전")
let o1 = subject.subscribe { print("o1 subject evnet : \\($0)")}
o1.disposed(by: disposeBag)
subject.onNext("구독후")
출력
o1 subject evnet : next(구독후)
정리하자면 o1 옵저버블이 구독을 하기전에 받은 onNext 이벤트는 무시됩니다. 구독 후에 받은 onNext 이벤트를 받을 수 있습니다.
두번째 예시입니다.
let subject = PublishSubject<String>()
subject.onNext("구독전")
let o1 = subject.subscribe { print("subject evnet : \\($0)")}
o1.disposed(by: disposeBag)
subject.onNext("구독후")
let o2 = subject.subscribe { print("o2 subject evnet : \\($0)")}
o2.disposed(by: disposeBag)
subject.onNext("Next Event")
출력
subject evnet : next(구독후)
subject evnet : next(Next Event)
subject evnet : next(Next Event)
이렇게 출력됩니다. 위에 “구독후”가 출력된 이후에 o2 옵저버블이 새로 구독을 하게 됩니다.
그후 방출되는 onNext 이벤트는 o1, o2 두 옵저버블 모두 구독중이기 때문에 “next(Next Event)” 가 두번 출력됩니다.
마지막으로 Completed 나 Error 이벤트 이후 구독되는 옵저버블에 대해선 이벤트를 수신할 수 없습니다.
반응형
'Development > RxSwift' 카테고리의 다른 글
RxSwift) ReplaySubject 란? (0) | 2022.05.30 |
---|---|
RxSwift) BehaviorSubject 란? (0) | 2022.05.30 |
Subject 란? (0) | 2022.05.30 |
RxSwift) Operators 란? (0) | 2022.05.30 |
RxSwift) Disposables 란? (0) | 2022.05.30 |
Comments