gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:04:21 32 4
gpt4 key购买 nike

我有一个 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com