Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

RxSwift obtain value from one item in Observable sequence

I'm trying to gradually convert my App to RxSwift / MVVM. But I think I'm doing some things incorrectly.

In this example I have a static table with this specific information.

    let itens = Observable.just([
        MenuItem(name: GlobalStrings.menuItemHome,      nameClass: "GPMainVC"),
        MenuItem(name: GlobalStrings.menuItemProfile,   nameClass: "GPMainVC"),
        MenuItem(name: GlobalStrings.menuItemLevels,    nameClass: "GPLevelsVC"),
    ])

I need to know the model(MenuItem) and the index when the user select a cell, but I am having trouble doing that

 tableView.rx
        .itemSelected
        .map { [weak self] indexPath in
            return (indexPath, self?.modelView.itens.elementAt(indexPath.row))
        }
        .subscribe(onNext: { [weak self] indexPath, model in

            self?.tableView.reloadData()

            //can´t get MenuItem because model its a observable
            //self?.didSelect((indexPath as NSIndexPath).row, name.nameClass)

        })
        .addDisposableTo(disposeBag)

Thanks in advance

like image 353
DaSilva Avatar asked Oct 14 '16 11:10

DaSilva


1 Answers

You have to do next steps:

  1. Use Variable. I think it's a better solution in your situation.

    let itens = Variable([
        MenuItem(name: GlobalStrings.menuItemHome, nameClass: "GPMainVC"),
        MenuItem(name: GlobalStrings.menuItemProfile, nameClass: "GPMainVC"),
        MenuItem(name: GlobalStrings.menuItemLevels, nameClass: "GPLevelsVC"),
    ])
    
  2. Use the following code if you want to get index and model from a clicked cell.

    tableView.rx
    .itemSelected
    .map { index in
        return (index, self.items.value[index.row])
    }
    .subscribe(onNext: { [weak self] index, model in
        // model is MenuItem class
    })
    .addDisposableTo(disposeBag)
    

    I hope my answer was very helpful for you. Please let me know if you want more information about RxSwift opportunities in your task. Good luck!

like image 171
Svyatoslav Avatar answered Nov 18 '22 11:11

Svyatoslav