使用 rxSwift 中的 tableView 单元将数据从视图模型传递到视图控制器
Posted
技术标签:
【中文标题】使用 rxSwift 中的 tableView 单元将数据从视图模型传递到视图控制器【英文标题】:Passing data from a view model to a view controller using tableView cell in rxSwift 【发布时间】:2021-10-01 05:03:29 【问题描述】:所以我制作了一个简单的响应式表格视图来学习 rxSwift,但我在访问 ViewModel 中的数据时遇到了困难。所以我创建了一个我认为如何从我的视图模型中获取数据的非常糟糕的方法
tableView.rx.itemSelected
.subscribe(onNext: [weak self] indexPath in
print("Tapped \(String(describing: self?.hospitalListVM?.result.value[0].id))")
).disposed(by: disposeBag)
我不认为这是处理数据的 rx 方式。有没有更好的解决方案来解决我在 viewModel 中访问数据的问题?
我的视图模型
class HospitalListViewModel:APIRequest
var baseURL:String = "https://"
var method: RequestType = .GET
var result = BehaviorRelay<[RumahSakitModel]>(value: [])
var isLoaded = BehaviorRelay<Bool>(value: false)
func fetchData()
guard let url = URL(string:baseURL) else return
let session = URLSession.shared.dataTask(with: url) data, _,_ in
guard let data = data else return
do
let hasil = try JSONDecoder().decode([RumahSakitModel].self, from: data)
self.result.accept(hasil)
self.isLoaded.accept(true)
catch let err
print(err)
session.resume()
我如何绑定我的 tablewView
hospitalListVM?
.result
.bind(to: tableView.rx.items(cellIdentifier: HospitalTableCell.identifier, cellType: HospitalTableCell.self)) _, post, cell in
cell.configureSubView(title: post.nama ?? " ", subTitle: post.jenis ?? " ")
.disposed(by: disposeBag)
【问题讨论】:
你注册单元格并将tableview的delegate设置为self
了吗?
能否提供输出截图?
它自己的输出是数据,比如1到n,但我认为这不合适
我没有将它注册到 tableview 委托,不知何故它与 rxCocoa 库冲突
@VisalRajapakse ,我可以得到输出,输出是数据的id。我想知道的是在这个问题上有没有其他合适的方法。 rx 快速方式
【参考方案1】:
找到所选对象的两种标准方法在这里:
let rumahSakitModel1 = tableView.rx.itemSelected
.withLatestFrom(hospitalListVM!.result) $1[$0.row]
let rumahSakitModel2 = tableView.rx.modelSelected(RumahSakitModel.self)
使用上述任何一种方法,您都可以这样做:
rumahSakitModelX
.subscribe(onNext: model in
print("Tapped \(model.id)")
)
.disposed(by: disposeBag)
【讨论】:
以上是关于使用 rxSwift 中的 tableView 单元将数据从视图模型传递到视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
使用 RxSwift 对成员“tableView”的模糊引用
tableView.rx.itemSelected 中的 RxSwift 双映射
如何在 RxSwift 中使用 tableView 数据源(numberOfRowsInSection)?