Вы можете поместить Disposable
или DisposeBag
во ViewModel, все зависит от того, когда вы хотите, чтобы подписки умерли.Это хорошая практика, чтобы держать их всех в одном месте, как, например.ViewController.Где будет намного проще обрабатывать подписки, так как иногда вам не нужна подписка для бизнес-логики, напр.когда прокрутка просмотра прокручивается, вы отключаете кнопку.(Но, тем не менее, существуют архитектуры, такие как RxMVP, где все наоборот)
В вашем случае вы можете комбинировать Observables
вместо использования переменной в ViewModel.Все зависит от ваших потребностей, но у вас может быть что-то вроде:
class ViewModel {
var activeItems: Observable<[Item]> {
return Observable.combineLatest(retrieveData(), itemEdited().startWith(nil)) { (allItems, editedItem) in
// TODO: check if edited item should be in list
}
}
private func retrieveData() -> Observable<[Item]> {
return .empty()
}
private func itemEdited() -> Observable<Item?> {
return .empty()
}
}
Если у вас есть эти элементы, поступающие из Realm или CoreData, вы можете использовать реализации Rx для вашей базы данных, поэтому она будет генерировать событие каждый развремя изменения вашей сущности.