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

然后,我在表 View 中找到该结果以进行显示。我遇到的问题是如何在单击的特定单元格上调用详细信息 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团队在其中创建一个负责处理 View Controller 导航的App类的视频。他们在这里使用闭包而不是Rx,但是对应关系也应该很明显。

10-06 07:23
查看更多