RxSwift从Observable序列中的一个项获取值

DaS*_*lva 4 ios swift rx-swift

我正在尝试逐渐将我的应用程序转换为RxSwift/MVVM.但我认为我做错了一些事情.

在这个例子中,我有一个包含这些特定信息的静态表.

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

当用户选择一个单元格时,我需要知道模型(MenuItem)和索引,但我在这方面遇到了麻烦

 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)
Run Code Online (Sandbox Code Playgroud)

提前致谢

Svy*_*lav 6

你必须做下一步:

  1. 使用变量.我认为在您的情况下这是一个更好的解决方案.

    let itens = Variable([
        MenuItem(name: GlobalStrings.menuItemHome, nameClass: "GPMainVC"),
        MenuItem(name: GlobalStrings.menuItemProfile, nameClass: "GPMainVC"),
        MenuItem(name: GlobalStrings.menuItemLevels, nameClass: "GPLevelsVC"),
    ])
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果要从单击的单元格中获取索引和模型,请使用以下代码.

    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)
    
    Run Code Online (Sandbox Code Playgroud)

    我希望我的回答对你很有帮助.如果您想在任务中获得有关RxSwift机会的更多信息,请与我们联系.祝好运!