如何使用响应式编程订阅数据数组中的单项更改(插入或删除)?

How to use reactive programming to subscribe to single-item changes (insertions or deletions) in an array of data?

对于上下文,我使用 swift 和 MVVM 架构来管理数据列表,以及显示它的 table 视图。响应式模式(RxSwift 或 Combine)非常适合让我在视图模型的列表数据更改时重新加载整个 table 视图。

ViewModel(使用 RxSwift):

var tableData = BehaviorRelay<[String]>(value: ["First Item", "Second Item"])

ViewController:

var tableView = UITableView()
var disposeBag = DisposeBag()
var viewModel = ViewModel()

init() {
    ...
    viewModel.tableData.subscribe(onNext: { _ in 
       self.tableView.reloadData()
    }).disposed(by: disposeBag)
}

但是如果只从 tableData 中插入或删除了一项怎么办?在这种情况下,我不想调用 tableView.reloadData(),而是想使用 tableView.insertRows(at: <[IndexPath]>, with: <UITableView.RowAnimation>)tableView.deleteRows(at: <[IndexPath]>, with: <UITableView.RowAnimation>)。为此,我需要能够订阅已插入或删除的索引路径,而不是订阅整个列表数据。有谁知道最有效的方法是什么?

使用 UITableViewDiffableDataSource。它会自动(反应性地)为您处理这件事。