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())

А затем послушайте событие в моем viewController

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

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

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

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


person Edgar    schedule 02.02.2017    source источник


Ответы (1)


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

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

person solidcell    schedule 03.02.2017