What is Rx: ReactiveX is an API for asynchronous programming with observable streams Observable streams (i.e. streams that can be observed) in the context of Reactive Extensions are like event emitters that emit 3 events: next, error, and complete.
History ● Started as part of the .NET/C# ecosystem ● Reactive programming is a programming paradigm oriented around data flows and the propagation of change ● Functional Programming
Observables and Observers: ● An Observable is something which emits notifications of change. ● An Observer is something which subscribes to an Observable, in order to be notified when it has changed.
Observables and Observers: ● .next(value: T) — When a value or collection of values is added to an observable sequence ● .error(error: Error) — If an Error is encountered, a sequence will emit an error event. This will also terminate the sequence. ● .completed — If a sequence ends normally it sends a completed event to its subscribers
Dispose Bag: ● RxSwift and RxCocoa also have an additional tool to help deal with ARC and memory management: the DisposeBag. Helps with deallocation of object.
let observable = Observable.just("Hello World") observable.subscribe(onNext: { myString in print(myString) }).addDisposableTo(disposeBag) Observables and Observers:
Subjects: ● PublishSubject — If you subscribe to it you will get all the events that will happen after you subscribed. ● BehaviourSubject — A behavior subject will give any subscriber the most recent element and everything that is emitted ● ReplaySubject — you can define how many recent items you want to emit to new subscribers
Subjects: let bag = DisposeBag() var publishSubject = PublishSubject() publishSubject.onNext("Hello") publishSubject.subscribe(onNext:{ print($0) }).addDisposableTo(bag)
Schedulers: ● All operators and observables run on the same thread that they are subscribed on. ● We can force them on different threads with subscribeOn and observeOn. ● It uses operation-ques and dispatch-queues under the hood.