【发布时间】:2020-11-04 18:39:26
【问题描述】:
我有一个UIViewController,它使用UITableViewDiffableDataSource。我有这个控制器的视图模型,看起来像:
class ListViewModel {
@Published private(set) var items: [Item] = []
func load(params: [String: Any] = [:]) {
WebRepo().index(params: params, completion: { [weak self] (items, error) in
self?.items = items
})
}
func deleteFirst() {
self.items.remove(object: self.items.first)
}
}
在我的 VC 中,我有一个类似的绑定:
self.viewModel.$items.sink { [weak self] (scenes) in
self?.update(items: items, animated: false)
}.store(in: &self.subscriptions)
所以,当我调用我的视图模型的 load 方法时 - 我想做 self?.update(items: items, animated: false),但是当我调用 deleteFirst 时 - 我想要 self?.update(items: items, animated: true)。
我对响应式和组合很陌生,所以不确定处理这个问题的正确方法是什么。
我可以将isReset 属性添加到我的视图模型中,并将load 方法更改为:
func load(params: [String: Any] = [:]) {
WebRepo().index(params: params, completion: { [weak self] (items, error) in
self?.isReset = true
self?.items = items
self?.isReset = false
})
}
在sink 内部,只需检查此属性,但它看起来对我来说不是正确的方法。
【问题讨论】: