Skip to content

Instantly share code, notes, and snippets.

@eviathan
Last active December 19, 2018 16:29
Show Gist options
  • Save eviathan/40540bc5c3700e7c4b26384b840e476c to your computer and use it in GitHub Desktop.
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
// 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