【发布时间】:2021-03-31 02:47:24
【问题描述】:
我有一个包含UISwitch 的UITableViewCell。此单元格有自己的SwitchCellViewModel。可以说它包含一些 Bool 值(启用与禁用)。而ViewController 是包含UITableView 的那个,为单元格创建viewModel 并用它设置单元格。
我想要一个成就:
- 在单元格级别:每当 viewModel 的 bool 属性值更改时更改 UISwitch 状态(当然无需重新加载 tableView)。
- 在 ViewController 级别:处理 UISwitch 状态更改(由用户)。
接下来是用例:单元格显示一些可以禁用或启用的选项。该操作转到后端,在收到结果响应后(在后端启用与禁用),我必须再次将视图的状态与更新的数据同步。
我了解如何在单元格级别订阅属性值更改,因此当我从 viewController 在 viewModel 中更改它时,它会立即更新单元格视图。但是我不确定如何处理从UISwitch 到 viewController 的返回操作。
是否可以通过 viewModel 中的单个 @Published bool 属性来实现,或者对于这种双向情况,我必须有 2 个单独的东西。
我必须为此公开一个单独的Publisher 看起来真的很愚蠢,因为我在视图模型中已经有一个@Published 属性,应该通知该视图控制器,所以我为什么不使用它。但是如果我只使用一个,那么 ViewController 会在 viewModel 中设置@Published var,cell 本身会处理它并调整 UI,但 ViewController 也会立即获取有关它的事件,因为它已订阅它。
【问题讨论】:
-
为什么需要
@Published?你打算与 SwiftUI 交互吗?如果是的话,你能告诉我们更多的细节吗?如果不是,那么您可能根本就不是 SwiftUI 属性包装器。
标签: ios swift mvvm uikit combine