RxSwift、RxCocoa 和 UITableview
Posted
技术标签:
【中文标题】RxSwift、RxCocoa 和 UITableview【英文标题】:RxSwift, RxCocoa and UITableview 【发布时间】:2017-09-13 15:45:00 【问题描述】:我在使用 RxSwift 实现 UITableView 时遇到问题。
我尝试使用以下代码将模型数组的 observable 绑定到表项。
models.bind(to: self.tableView.rx.items(cellIdentifier: "Cell", cellType: ModelTableViewCell.self
.
但是当我这样做时,它给了我以下错误:Type 'inout UITableView' does not conform to protocol 'ReactiveCompatible'
我知道错误不可能是正确的,因为 NSObject 扩展了 ReactiveCompatible 所以 UITableView 也可以。此外,我的项目代码与 RxSwiftCommunity 上显示的示例并没有真正不同
我创建了一个有错误的小示例项目。
【问题讨论】:
【参考方案1】:Swift 是相当不错的语言,但有时编译器无法识别参数的类型。然后你需要显式定义一种类型的参数。在您的情况下,您需要定义块参数的类型,请参见代码:
func bindRx(viewModel: ViewModel)
viewModel.models.bind(to: tableView.rx.items(cellIdentifier: ModelTableViewCell.ReuseIdentifier,
cellType: ModelTableViewCell.self)) (_, model: Model, cell: ModelTableViewCell) in
cell.textLabel?.text = model.name
.addDisposableTo(disposeBag)
【讨论】:
如果我想绑定自定义标签怎么办? ,这段代码适用于 UitableviewCell 而不是 Custom tableview Cell 在我的代码示例中有自定义单元格类型ModelTableViewCell
您可以通过添加 Outlet class ModelTableViewCell: UITableViewCell @IBOutlet var myLabel: MyCustomLabel!
来扩展它以上是关于RxSwift、RxCocoa 和 UITableview的主要内容,如果未能解决你的问题,请参考以下文章
处理 UITableView 绑定中的连接错误(Moya、RxSwift、RxCocoa)
Swft3 (RxSwift, RxCocoa) - TableView 使用响应式编程展开和折叠概念
如何在 UITableView 的 RXswift 和 RXCocoa 中实现 tableview 单元格的内部?
为啥 `NotificationCenter+Rx` 在 RxCocoa 而不是 RxSwift