If you are a user of RxSwift, you probably already know about RxCocoa, and you must also hear about the advantages of RxSwift such as less code, easier error handling, and simpler concurrency handling. , …. (in general a lot more things) So what is
RxCocoa , sounds like
RxSwift , why do we still need
RxCocoa when we have the divine
RxSwift ? And why did
Observable spawn more concepts like
Driver , … (probably to make it difficult for developers) If you have such questions in mind then perhaps this article will be helpful to you. This article will help you partly answer the above questions and partly PR for
First, to answer the above question, make it clear that
RxSwift is not something divine and perfect, it is only perfect when we put it in the right place, in the right place, in the right case.
RxCocoa also built from
RxSwift and it is also part of
RxSwift , it has extra extensions to help us work with UI more easily.
OK, if you already know that they are two mutually supportive libraries, then let’s explore the concepts outlined at the beginning of what
Driver are? All of them are collectively called
Trait , which defines a textbook machine can be defined as: “Trait is a struct wrapper with an Observable Sequence property inside it. Trait can be considered as an application of the Builder Pattern to Observable. ” And if you find the above definition a bit confusing, you can think that
Trait is a
Observable đặc biệt . Why is it special? because
Trait has different characteristics from
- Trait does not emit an error.
- Trait is observe and subscribe on MainScheduler.
- Trait shares
Side Effect(By the way,
Side Effectare changes outside of
scopethat do not affect
scope, for example: when you call .do (onNext: // sthg here))
This is a general concept of
Trait and of course different Trait will have different characteristics that create diversity and make it possible for us to use them in different cases. To prove the above point, we will try to learn about
Single has the property that it will emit either
.success(value) is a combination of
.completed .) Based on this feature,
Single can use Used in cases where the event is emitted sporadically and has only success or error, such as used to emit the event when calling the API, loading data from disk, when downloading data, … Or
Completable with features Just emit out
.error will be suitable for tasks that you only care about when the task is complete, typically writing data to a file.
Observable helps us a lot and
Trait makes it even better. Like
RxCocoa always used in parallel because they complement each other very well.
For the rest of the article, learn about
Driver , which is also considered a
Trait and is a component of
Driver no different from
Observable , only it does not emit error and it always executes on
Main . These features are really
tuyệt vời when we work with UI. Why? Because Driver was born to do it. Don’t use
subscribe on ViewController to show Alert because you’ll probably forget to observe on
MainScheduler and it might crash. And if you use Observable as an output and listen to it then be careful because it could be
duplicate because Observable has no
share available. That is why the
Driver is suitable and extremely suitable when used with the UI.
Through the article I hope to clarify for you the problem “Observable is born not doing everything”, in ReactiveX spawns a lot of concepts to supplement and to undertake different parts, So if we understand them, we can find the best use. The article is purely personal opinion and evaluation, so if something is not correct, I hope the “gentle” and “emotional” comment will be absorbed.