lifecycle-rx ===== Модуль для преобразования событий из `Observable` в `LiveData`. Нужен для передачи событий из `ViewModel` во `ViewController` с автоматическим управлением подписками во `ViewController`. ### Основный интерфейсы и классы `Destroyable` - интерфейс, который содержит extansion-функцию *untilDestroy* для `Flowable`, `Observable`, `Single`, `Completable`, `Maybe`. Данная функция гарантирует, что подписка на события "умрет" после *onDestroy*. `LifeDataDispatcher` - интерфейс, описывающий функцию *dispatchTo* для преобразования `Observable` в `MutableLiveData`. `BaseDestroyable` и `BaseLifeDataDispatcher` - базовые реализации `Destroyable` и `LifeDataDispatcher` соответсвенно. `RxViewModel` - базовый класс, от которого должны наследоваться все `ViewModel`. Обеспечивает отписку всех подписчиков при возникновении *onCleared*. Реализует `BaseDestroyable` и `LiveDataDispatcher`. По умолчанию использует базовые реализации данных интерфейсов, при желании можно передать свои `Destroyable` и `LiveDataDispatcher` через конструктор. ### Примеры Простой пример `ViewModel`, через который можно получить список элементов и добавить один элемент. ```kotlin class SomeViewModel ( private val someRepository: SomeRepository ) : RxViewModel() { val itemsList = MutableLiveData>>() fun getItemsList() { someRepository .getItems() .dispatchTo(itemsList) } fun addItem(item: Item) { someRepository .addItem(item) .untilDestroy() } } ``` Подписка на события во `ViewController`. `ContentEvent` описан в модуле [lifecycle](https://github.com/TouchInstinct/RoboSwag/tree/master/lifecycle). ```kotlin someViewModel.itemsList.observe(this, Observer { event -> when (event) { is ContentEvent.Loading -> // do something is ContentEvent.Success -> // do something is ContentEvent.Error -> // do something } }) ```