fimuxd/RxSwift를 참고해 정리하는 글입니다 🙂
실제 사용하는 방식은 실시간으로 Observable에 수동으로 값을 수동으로 추가하고 subscriber에게 방출
Subjects = Observable + Observer
값을 넘겨주기도 하고 밖에서 주입할 수 있는 양방향성 Observable
let subject = PublishSubject<String>()
subject.onNext("Is anyone listening?")
let subscriptionOne = subject
.subscribe(onNext: { (string) in
print(string)
})
subject.on(.next("1")) //Print: 1
subject.onNext("2") //Print: 2
.on(.next(_:))
새로운 .next
이벤트를 subject에 삽입 = .onNext(_:)
와 동일.completed
또는 .error
와 같은 종료 이벤트를 받으면 새 subscriber에겐 종료 이벤트를 방출let subject = BehaviorSubject(value: "Initial value")
subject.onNext("X")
subject
.subscribe{
print(label: "1)", event: $0)
}
.disposed(by: disposeBag)
subject.onError(MyError.anError)
subject
.subscribe {
print(label: "2)", event: $0)
}
.disposed(by: disposeBag)
let subject = ReplaySubject<String>.create(bufferSize: 2)
subject.onNext("1")
subject.onNext("2")
subject.onNext("3")
subject
.subscribe {
print(label: "1)", event: $0)
}
.disposed(by: disposeBag)
subject
.subscribe {
print(label: "2)", event: $0)
}
.disposed(by: disposeBag
error
로 종료해도 버퍼가 살아있어 이후 구독자에게 이벤트를 재방출할 수 있어 바로 dispose를 해줘야 함 → 에러 이벤트만 받게 함