tableView.rx.itemSelected 中的 RxSwift 双映射
RxSwift double mapping in tableView.rx.itemSelected
我想从 tableView.rx.itemSelected
获取对象并处理它。这个方法returnIndexPath
,所以我可以映射这个值。但是如何从 ViewModel
获取索引处的对象?
struct ViewModel {
var items: Observable<[Item]>
}
大约我期望这样的事情(但这个流程是错误的):
tableView.rx.itemSelected
.map { indexPath -> Item in
return viewModel.items.map {[=12=][indexPath.row]}
}
..subscribe(onNext: { [unowned self] item in
//other actions with Item object
})
.disposed(by: disposeBag)
我在某处展示了这种可能性,但想不起来了。你知道怎么做吗?
RxCocoa 有两个方法:
public var itemSelected: ControlEvent<IndexPath> { get }
returns IndexPath
所选项目
和
public func modelSelected<T>(_ modelType: T.Type) -> ControlEvent<T>
其中 returns 模型元素
根据您的示例,它将看起来:
tableView.rx.modelSelected(Item.self)
.subscribe(onNext: { [weak self] item in
// other actions with Item object
}).addDisposableTo(disposeBag)
如果您同时需要 indexPath
和 model
,您可以将这两种方法结合起来,并将它们转换为一个可观察的序列:
Observable
.zip(tableView.rx.itemSelected, tableView.rx.modelSelected(String.self))
.bind { [unowned self] indexPath, model in
self.tableView.deselectRow(at: indexPath, animated: true)
print("Selected " + model + " at \(indexPath)")
}
.disposed(by: disposeBag)
我还找到了在 itemSelected
命令后添加 do(onNext:{...})
的其他方法:
tableView.rx
.itemSelected
.do(onNext: { [unowned self] indexPath in
self.tableView.deselectRow(at: indexPath, animated: false)
})
.map { indexPath -> Item in
return viewModel.items.map {[=10=][indexPath.row]}
}
.subscribe(self.viewModel.reviewTimeAction.inputs)
.disposed(by: disposeBag)
我想从 tableView.rx.itemSelected
获取对象并处理它。这个方法returnIndexPath
,所以我可以映射这个值。但是如何从 ViewModel
获取索引处的对象?
struct ViewModel {
var items: Observable<[Item]>
}
大约我期望这样的事情(但这个流程是错误的):
tableView.rx.itemSelected
.map { indexPath -> Item in
return viewModel.items.map {[=12=][indexPath.row]}
}
..subscribe(onNext: { [unowned self] item in
//other actions with Item object
})
.disposed(by: disposeBag)
我在某处展示了这种可能性,但想不起来了。你知道怎么做吗?
RxCocoa 有两个方法:
public var itemSelected: ControlEvent<IndexPath> { get }
returns IndexPath
所选项目
和
public func modelSelected<T>(_ modelType: T.Type) -> ControlEvent<T>
其中 returns 模型元素
根据您的示例,它将看起来:
tableView.rx.modelSelected(Item.self)
.subscribe(onNext: { [weak self] item in
// other actions with Item object
}).addDisposableTo(disposeBag)
如果您同时需要 indexPath
和 model
,您可以将这两种方法结合起来,并将它们转换为一个可观察的序列:
Observable
.zip(tableView.rx.itemSelected, tableView.rx.modelSelected(String.self))
.bind { [unowned self] indexPath, model in
self.tableView.deselectRow(at: indexPath, animated: true)
print("Selected " + model + " at \(indexPath)")
}
.disposed(by: disposeBag)
我还找到了在 itemSelected
命令后添加 do(onNext:{...})
的其他方法:
tableView.rx
.itemSelected
.do(onNext: { [unowned self] indexPath in
self.tableView.deselectRow(at: indexPath, animated: false)
})
.map { indexPath -> Item in
return viewModel.items.map {[=10=][indexPath.row]}
}
.subscribe(self.viewModel.reviewTimeAction.inputs)
.disposed(by: disposeBag)