Vista de tabla RxSwift con múltiples types de celdas personalizadas

Me pregunto si hay algún ejemplo de código para RxSwift cuando puedo usar varias celdas personalizadas dentro de una vista de tabla. Entonces, por ejemplo, tengo dos secciones y la primera sección tiene 10 celdas con el tipo de identificador de CellWithImage y la segunda sección tiene 10 celdas con el tipo de identificador CellWithVideo .

Todos los ejemplos de código y tuts que he fundado están utilizando un solo tipo de celda, por ejemplo, RxSwiftTableViewExample

Gracias por cualquier ayuda

Lo he logrado usando RxSwiftDataSources ,

Le permite usar celdas personalizadas con múltiples secciones.

En caso de que alguien esté interesado, aquí está mi implementación. Tengo una aplicación con una list de juegos. Dependiendo de si el juego está terminado o todavía en curso, uso diferentes celdas. Aquí está mi código:

En el ViewModel, tengo una list de juegos, los dividí en uno terminado / continuo y los SectionModel a SectionModel

 let gameSections = PublishSubject<[SectionModel<String, Game>]>() let dataSource = RxTableViewSectionedReloadDataSource<SectionModel<String, Game>>() ... self.games.asObservable().map {[weak self] (games: [Game]) -> [SectionModel<String, Game>] in guard let safeSelf = self else {return []} safeSelf.ongoingGames = games.filter({$0.status != .finished}) safeSelf.finishedGames = games.filter({$0.status == .finished}) return [SectionModel(model: "Ongoing", items: safeSelf.ongoingGames), SectionModel(model: "Finished", items: safeSelf.finishedGames)] }.bindTo(gameSections).addDisposableTo(bag) 

Luego, en el ViewController, enloop mis secciones a mi vista de tabla y uso diferentes celdas como esta. Tenga en count que podría usar indexPath para get la celda correcta en lugar del estado.

 vm.gameSections.asObservable().bindTo(tableView.rx.items(dataSource: vm.dataSource)).addDisposableTo(bag) vm.dataSource.configureCell = {[weak self] (ds, tv, ip, item) -> UITableViewCell in if item.status == .finished { let cell = tv.dequeueReusableCell(withIdentifier: "FinishedGameCell", for: ip) as! FinishedGameCell cell.nameLabel.text = item.opponent.shortName return cell } else { let cell = tv.dequeueReusableCell(withIdentifier: "OnGoingGameCell", for: ip) as! OnGoingGameCell cell.titleLabel.text = item.opponent.shortName return cell } }