RxSwift – Пользовательский класс как наблюдаемый

Я создаю собственную универсальную модель TableView для работы с MVVM и RxSwift. Я знаю класс RxTableViewSectionedReloadDataSource но не хочу использовать его сейчас в моем проекте.

Модель создана и работает

 typealias TableViewModel = TableModel<CellDescriptor> class TableModel<T> { var sections = [SectionModel<T>]() func add(item: SectionModel<T>) { sections.append(item) } // More funcs there... } 

Я создал экземпляр внутри моего ViewModel как таковой:

 var tableViewModel = Variable<TableViewModel>(TableViewModel()) 

А затем послушайте событие в моем представлении Контроллер

 viewModel.tableViewModel.asObservable().subscribe({ [weak self] value in self?.tableView.reloadData() }).addDisposableTo(dispose) 

Несколько вопросов здесь (я довольно новичок в FRP):

  • Как я могу «испустить» событие для запуска моей подписки в viewController из моего пользовательского класса? Я знаю, что решением будет создание моего массива разделов как RxSwift Variable() а затем прослушать его напрямую, но задайтесь вопросом, есть ли способ сделать класс (или структуру) сам наблюдаемым.

  • Есть ли лучший подход к этой проблеме? Я прошел через игровую площадку RxSwift и примерный проект, но похоже, что существует тысяча способов сделать то же самое. Возможно, Observable не то, что я бы искал. 🙂

Не допускайте, чтобы сама модель просмотра наблюдалась. Это ненужная сложность, и это просто неинтуитивно. Если вы действительно этого хотели, посмотрите, как реализована Variable , которая должна дать вам представление о том, как это сделать.

Вместо этого просто используйте объект (например, Variable ) для хранения ваших данных в вашей модели представления.