We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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
Subject는 .next 이벤트를 받고, 이런 이벤트를 수신할 때마다 subscriber에 방출한다.
빈 상태
새로운 값
초기값
초기값 또는 최신값
버퍼
버퍼 사이즈 만큼의 값들을 유지
현재의 값을 상태로 보존
가장 최신/초기 값
let disposeBag = DisposeBag() let subject = PublishSubject<String>() subject.onNext("1") let subscriptionOne = subject .subscribe(onNext: { (string) in print("stream 1)", string) }) subject.onNext("2") // stream 1) 2 let subscriptionTwo = subject .subscribe({ (event) in print("stream 2)", event.element ?? event) }) subject.onNext("3") // stream 1) 3 // stream 2) 3 subscriptionOne.dispose() // stream 1 구독 취소, 이벤트 방출 정지 subject.onNext("4") // stream 2) 4 subject.onCompleted() // stream 2) completed subject.onNext("5") // 완전종료 이 후, 이벤트 방출 X subscriptionTwo.dispose() // stream 2 구독 취소, 이벤트 방출 정지 let subscriptionThree = subject .subscribe { print("stream 3)", $0.element ?? $0) } .disposed(by: disposeBag) subject.onNext("?") // stream 3) completed
.completed
.error
.next
enum MyError: Error { case anError } func print<T: CustomStringConvertible>(label: String, event: Event<T>) { print(label, event.element ?? event.error ?? event) } let subject = BehaviorSubject(value: "Initial value") let disposeBag = DisposeBag() subject.onNext("X") subject .subscribe{ print(label: "1)", event: $0) } .disposed(by: disposeBag) // 1) X subject.onError(MyError.anError) // 1) Optional(__lldb_expr_47.MyError.anError) subject .subscribe { print(label: "2)", event: $0) } .disposed(by: disposeBag) // 2) Optional(__lldb_expr_47.MyError.anError)
enum MyError: Error { case anError } func print<T: CustomStringConvertible>(label: String, event: Event<T>) { print(label, event.element ?? event.error ?? event) } let subject = ReplaySubject<String>.create(bufferSize: 2) let disposeBag = DisposeBag() subject.onNext("1") subject.onNext("2") subject.onNext("3") subject .subscribe { print(label: "1)", event: $0) } .disposed(by: disposeBag) // 1) 2 // 1) 3 subject .subscribe { print(label: "2)", event: $0) } .disposed(by: disposeBag) // 2) 2 // 2) 3 subject.onNext("4") // 1) 4 // 2) 4 subject .subscribe { print(label: "3)", event: $0) } .disposed(by: disposeBag) // 3) 3 // 3) 4 subject.onError(MyError.anError) // 1) Optional(__lldb_expr_54.MyError.anError) // 2) Optional(__lldb_expr_54.MyError.anError) subject .subscribe { print(label: "3)", event: $0) } .disposed(by: disposeBag) // 3) 3 // 3) 4 // 3) Optional(__lldb_expr_54.MyError.anError)
func print<T: CustomStringConvertible>(label: String, event: Event<T>) { print(label, event.element ?? event.error ?? event) } let relay = BehaviorRelay(value: "Initial value") let disposeBag = DisposeBag() relay.asObservable() .subscribe { print(label: "1)", event: $0) } .disposed(by: disposeBag) // 1) Initial value relay.accept("1") // 1) 1 relay.asObservable() .subscribe { print(label: "2)", event: $0) } .disposed(by: disposeBag) // 1) 1 relay.accept("2") // 1) 2 // 2) 2
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Ch.3 Subjects
A. 시작하기
예제
B. Subject의 종류
Subject는 .next 이벤트를 받고, 이런 이벤트를 수신할 때마다 subscriber에 방출한다.
빈 상태
로 시작하여새로운 값
만을 subscriber에 방출한다.초기값
을 가진 상태로 시작하여, 새로운 subscriber에게초기값 또는 최신값
을 방출한다.버퍼
를 두고 초기화하며,버퍼 사이즈 만큼의 값들을 유지
하면서 새로운 subscriber에게 방출한다현재의 값을 상태로 보존
한다.가장 최신/초기 값
만을 새로운 subscriber에게 방출한다C. PublishSubjects로 작업하기
1. 개념
.completed
또는.error
같은 완전종료 이벤트들을 받으면, 새로운 subscriber에게 더이상.next
이벤트를 방출하지 않을 것으로 예상할 수 있다..completed
이벤트만 방출한다.2. 사용 예시
D. BehaviorSubjects로 작업하기
1. 개념
초기값
을 가진 상태로 시작2. 사용 예시
E. ReplaySubjects로 작업하기
2. 사용 예시
F. BehaviorRelay
현재의 값을 상태로 보존
한다.가장 최신/초기 값
만을 새로운 subscriber에게 방출2. 사용 예시
The text was updated successfully, but these errors were encountered: