swift - MVVM RxSwift 将数据从主视图发送到详细 View Controller 的方法?

标签 swift mvvm reactive-programming rx-swift reactive

我有一个 View 模型,它有一个在调用 API 后返回可观察数组的元素。

然后我找到那个结果到一个 TableView 来显示它。我遇到的问题是如何在单击的特定单元格上调用详细 View Controller 。我将结果绑定(bind)为:

 let queryResults = eventsViewModel.mainTableItems

       queryResults
            .bind(to: collectionView.rx.items) { collectionView, row, item in

                let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: IndexPath(row: row, section: 0)) as! EventCell
                cell.heroID = "heroCellID"
                cell.restaurantNameLabel.text = item.name
                cell.restaurantDetailLabel.text = item.location
                cell.timeLabel.text = item.date
                cell.restaurantImageView.kf.setImage(with: URL(string: item.image))

                return cell
        }
        .addDisposableTo(disposeBag)

我无法访问这个被点击的可观察数组中的特定元素。它说 Observable 数组不能有下标。

这段代码是这样说的:

 vc.festival = queryResults.value[indexPath.row]

我对 RxSwift 还是个新手,我很难理解这一点。

最佳答案

这确实是一个百万美元的问题,即使不使用 RxSwift,也有很多不同的答案,但没有一个是真正简单的。简短的回答是,这取决于您的应用程序的架构方式。

首先,如果您还没有意识到,您会发现使用 tableView.rx.itemSelected 选择了哪个项目。

恕我直言, View Controller 应该彼此独立,所以您不想做的一件事就是从这个 View Controller 创建或继续到详细 View Controller 。应该有某种协调器对象订阅 itemSelected 并负责决定从那里去哪里。

这里有一些好文章可以帮助您走上正轨:

http://rasic.info/a-different-take-on-mvvm-with-swift/

在这篇文章中,Rasic 先生谈到了一个他称之为 Scene 的类,该类负责创建 View Controller 及其 View 模式,附加它们,然后决定从那里去哪里.

http://khanlou.com/2015/01/the-coordinator/

在这篇文章中,Khanlou 先生谈到了一个他称之为Coordinator 的类。他不使用 Rx,而是使用委托(delegate),但很容易看出它们之间的关系。

https://talk.objc.io/episodes/S01E05-connecting-view-controllers

在这段视频中,objc.io 团队创建了一个 App 类来处理 View Controller 导航。他们在这里使用闭包而不是 Rx,但是对应关系应该是显而易见的。

关于swift - MVVM RxSwift 将数据从主视图发送到详细 View Controller 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44348206/

相关文章:

java - 避免MVVM模式中的循环

c# - WPF MVVM 模态叠加对话框仅在 View (而非窗口)上

ios - 没有 onNext 的 observer.onComplete() 如何在 flatmap 链中工作? - 它必须跳过所有以下平面图,对吗?

swift - 使用 Swift 和 Parse 同时显示对象

mvvm - 使用 Knockout.js foreach 创建组

reactive-programming - 在 Rx.Net 中去抖直到

rx-java - 防止 Observable 为每个订阅运行

ios - 当单元格超出屏幕时,多次调用 UITableView

macos - 在当前窗口/ View Controller 的不同窗口/ View Controller 中执行代码

iOS 应用程序因 UICheckBox、drawLayer :inContext 而崩溃