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

如何测试 RxSwift 变量和 RxCocoa Observable 之间的 UI 绑定?

RxSwift 使用 RxCocoa 绑定到动画