BehaviorSubject

가장 최근 이벤트를 저장하고 새로운 구독자에게 전달

let p = PublishSubject<Int>()
p.subscribe { print("PublishSubject >>", $0) } // 내부에 이벤트가 저장되지 않는상태로 생성
    .disposed(by: disposeBag)

PublishSubject는 내부에 이벤트가 저장되지 않는상태로 생성된다.

let b = BehaviorSubject<Int>(value: 0)
b.subscribe { print("Behavior Subject >>", $0) } // 바로 next 이벤트가 전달됨(내부에 next이벤트가 생성되있음)
    .disposed(by: disposeBag)

BehaviorSubject는 초기값을 가지며 내부적으로 next이벤트가 생성된 상태로 생성된다.

let b = BehaviorSubject<Int>(value: 0)
b.subscribe { print("Behavior Subject >>", $0) } // 바로 next 이벤트가 전달됨(내부에 next이벤트가 생성되있음)
    .disposed(by: disposeBag)

내부에 next이벤트가 생성되었기 때문에 바로 0을 전달받는다.

let b = BehaviorSubject<Int>(value: 0)
b.subscribe { print("Behavior Subject >>", $0) } // 바로 next 이벤트가 전달됨(내부에 next이벤트가 생성되있음)
    .disposed(by: disposeBag)

b.onNext(1)

0, 1을 전달받음

b.onCompleted()
//b.onError(MyError.error)

// completed, error 상태만 전달받음
b.subscribe { print("Behavior Subject3 >>", $0) } // 바로 next 이벤트가 전달됨(내부에 next이벤트가 생성되있음)
    .disposed(by: disposeBag)

Completed, Error가 있는 경우 Completed, Error만 전달받는다.