Написание проекта на MVVM и попытка связать все с помощью RxSwift. К сожалению, мне не удалось найти правильный способ привязки действий.
Например, у меня есть таблица и простые ячейки с одной кнопкой - «Выбрать».
Для этого у меня будет две модели просмотра: ListViewModel
& CellViewModel
ListViewModel
будет создавать массив из CellViewModel
, и ему нужно будет подписаться на событие выбора (настраиваемое событие).
Сейчас я использую для этих целей BehaviorSubject, но это выглядит некрасиво. Кто может указать мне, как это нужно реализовать с помощью RxSwift?
class CellViewModel {
private let selectionSubject = BehaviorSubject<Void>(value: ())
// Will be used by ListViewModel
var selectionObservable: Observable<Void> {
return selectionSubject.asObservable()
}
func subscribeOnSelection(_ observable: Observable<Void>, disposeBag: DisposeBag) {
observable
.bind(to: selectionSubject)
.disposed(by: disposeBag)
}
private func autoSelect() {
selectionSubject.on(next: ())
}
}
class Cell: UITableViewCell {
@IBOutlet private var selectionButton: UIButton!
private let disposeBag = DisposeBag()
func bind(to viewModel: CellViewModel) {
viewModel.subscribeOnSelection(selectionButton.rx.tap.asObservable(), disposeBag: disposeBag)
}
}