https://www.lynda.com/Swift-tutorials/Observables/645029/709224-4.html
The sooner that you get values into the observable stream, the sooner the upper layers can manage subscriptions as opposed to providing closures and delegates. This simplifies your code keeping your classes free from protocols, delegates, and closures while containing subscriptions. Your layers know less about how something is implemented, i.e. protocols and delegates, and they're instead reacting to the state. This will simplify the logic in your classes and keep them focused more on setting your internal state and not triggering actions on something that they don't need to know about.