Observable: 이벤트를 전달
Observer: 이벤트를 구독
Subject: 이벤트를 전달하기도 하고 구독하기도 한다.
PublishSubject 생성
let subject = PublishSubject<String>()
let disposeBag = DisposeBag()
subject.onNext("Hello")
let o1 = subject.subscribe { print(">> 1", $0)} // o1 subject가 만들어지고 새로운 이벤트가 없기때문에 출력되지 않는다.
o1.disposed(by: disposeBag)
o1 구독자가 구독을 했지만 이벤트를 전달받지 않는다. 구독자가 생기기 이전에 next이벤트가 발생했기 때문이다.
let subject = PublishSubject<String>()
let disposeBag = DisposeBag()
subject.onNext("Hello")
let o1 = subject.subscribe { print(">> 1", $0)} // o1 subject가 만들어지고 새로운 이벤트가 없기때문에 출력되지 않는다.
o1.disposed(by: disposeBag)
subject.onNext("RxSwift") // 최소 여기서 이벤트가 출력됨
구독한 이후에 생성된 next 이벤트를 전달받는다.
let subject = PublishSubject<String>()
let disposeBag = DisposeBag()
subject.onNext("Hello")
let o1 = subject.subscribe { print(">> 1", $0)} // o1 subject가 만들어지고 새로운 이벤트가 없기때문에 출력되지 않는다.
o1.disposed(by: disposeBag)
subject.onNext("RxSwift") // 최소 여기서 이벤트가 출력됨
let o2 = subject.subscribe { print(">> 2", $0) }
o2.disposed(by: disposeBag)
subject.onNext("Subject")
o2는 Subject 이벤트만을 전달받고 o1은 RxSwift, Subject 이벤트를 모두 전달받는다.
//subject.onCompleted() // 모든 구독자에게 전달됨
subject.onError(MyError.error) // 모든 구독자에게 전달됨
let o3 = subject.subscribe { print(">> 3", $0) }
o3.disposed(by: disposeBag)
error와 completed는 모든 이벤트에 전달된다.