简体   繁体   中英

RxSwift - Custom class as observable

I'm creating a custom generic TableView model to work with MVVM and RxSwift. I'm aware of the RxTableViewSectionedReloadDataSource class but not willing to use it now in my project.

The model is created and working

typealias TableViewModel = TableModel<CellDescriptor>

class TableModel<T> {

    var sections = [SectionModel<T>]()

    func add(item: SectionModel<T>) {
        sections.append(item)
    }

    // More funcs there...
}

I created an instance inside my ViewModel as such :

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

And then listen to event in my viewController

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

Several questions here (I'm fairly new to FRP) :

  • How can I "emit" an event to trigger my subscription in the viewController from my custom class? I know that a solution would be to create my sections array as a RxSwift Variable() and then listen to it directly, but wonder if there's a way to make a class (or struct) itself Observable.

  • Is there a better approach to this problem ? I went through the RxSwift playground and example project but it sounds like there's a thousand ways to do the same thing. Maybe an Observable is not what i would be looking for. :)

Don't make the view model itself an Observable . It's unnecessary complexity and it's just not intuitive. If you really wanted to, then take a look at how Variable is implemented, which should give you an idea of how to do it.

Instead, just use a subject (such as Variable ) to hold onto your data within your view model.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM