Last active
December 19, 2018 16:29
-
-
Save eviathan/40540bc5c3700e7c4b26384b840e476c to your computer and use it in GitHub Desktop.
# [Subject](http://reactivex.io/documentation/subject.html) A Subject is a sort of bridge or proxy that is available in some implementations of ReactiveX that acts both as an observer and as an Observable. Because it is an observer, it can subscribe
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Publish Subjects | |
// Starts empty and only emits new elements to subscribers. | |
let publishSubject = PublishSubject<Int>() | |
publishSubject | |
.asObserver() | |
.subscribe(onNext: { | |
print("Publish Subject Sub 1: \($0)") | |
}) | |
.disposed(by: disposeBag) | |
publishSubject.onNext(1) | |
publishSubject | |
.asObserver() | |
.subscribe(onNext: { | |
print("Publish Subject Sub 2: \($0)") | |
}) | |
.disposed(by: disposeBag) | |
publishSubject.onNext(1) | |
// Behaviour Subjects | |
// Starts with an initial value and replays it or the latest element to new subscribers.s | |
let behaviourSubject = BehaviorSubject(value: 0) | |
behaviourSubject.asObserver() | |
.subscribe(onNext: { | |
print("Behaviour Subject Sub 1: \($0)") | |
}) | |
.disposed(by: disposeBag) | |
behaviourSubject.onNext(1) | |
behaviourSubject.asObserver() | |
.subscribe(onNext: { | |
print("Behaviour Subject Sub 2: \($0)") | |
}) | |
.disposed(by: disposeBag) | |
behaviourSubject.onNext(2) | |
// Replay Subjects | |
// Initialized with a buffer sie and maintains and replays n elements to new subscribers. | |
let replaySubject = ReplaySubject<Int>.create(bufferSize: 2) | |
replaySubject.onNext(1) | |
replaySubject.asObserver() | |
.subscribe(onNext: { | |
print("Replay Subject Sub 1: \($0)") | |
}) | |
.disposed(by: disposeBag) | |
replaySubject.onNext(2) | |
replaySubject.onNext(3) | |
replaySubject.asObserver() | |
.subscribe(onNext: { | |
print("Replay Subject Sub 2: \($0)") | |
}) | |
.disposed(by: disposeBag) | |
replaySubject.onNext(4) | |
// Variables | |
// Wraps a BehaviourSubject and preserves its current value as state and only replays the latest/ initial value to new subscribers | |
// NOTE: Marked for deprecation in favour of BehaviorRelays | |
let variable = Variable<Int>(0) | |
variable.asObservable() | |
.subscribe(onNext: { | |
print("Variable Sub 1: \($0)") | |
}) | |
.disposed(by: disposeBag) | |
variable.value = 2 | |
variable.asObservable() | |
.subscribe(onNext: { | |
print("Variable Sub 2: \($0)") | |
}) | |
.disposed(by: disposeBag) | |
variable.value = 3 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment