【问题标题】:Two-way binding in Swift Combine (UIKit)Swift Combine (UIKit) 中的双向绑定
【发布时间】:2021-03-31 02:47:24
【问题描述】:

我有一个包含UISwitchUITableViewCell。此单元格有自己的SwitchCellViewModel。可以说它包含一些 Bool 值(启用与禁用)。而ViewController 是包含UITableView 的那个,为单元格创建viewModel 并用它设置单元格。

我想要一个成就:

  1. 在单元格级别:每当 viewModel 的 bool 属性值更改时更改 UISwitch 状态(当然无需重新加载 tableView)。
  2. 在 ViewController 级别:处理 UISwitch 状态更改(由用户)。

接下来是用例:单元格显示一些可以禁用或启用的选项。该操作转到后端,在收到结果响应后(在后端启用与禁用),我必须再次将视图的状态与更新的数据同步。

我了解如何在单元格级别订阅属性值更改,因此当我从 viewController 在 vi​​ewModel 中更改它时,它会立即更新单元格视图。但是我不确定如何处理从UISwitch 到 viewController 的返回操作。

是否可以通过 viewModel 中的单个 @Published bool 属性来实现,或者对于这种双向情况,我必须有 2 个单独的东西。

我必须为此公开一个单独的Publisher 看起来真的很愚蠢,因为我在视图模型中已经有一个@Published 属性,应该通知该视图控制器,所以我为什么不使用它。但是如果我只使用一个,那么 ViewController 会在 viewModel 中设置@Published var,cell 本身会处理它并调整 UI,但 ViewController 也会立即获取有关它的事件,因为它已订阅它。

【问题讨论】:

  • 为什么需要@Published?你打算与 SwiftUI 交互吗?如果是的话,你能告诉我们更多的细节吗?如果不是,那么您可能根本就不是 SwiftUI 属性包装器。

标签: ios swift mvvm uikit combine


【解决方案1】:

@Published 是一种单向数据流 - 它与 ObservableObject 一起合成一个组合发布者链,当值“将改变”时发送更新(半双工或单向)。它不会发送已更改的值,而只会发送更改的信号。

要让数据流返回模型,您需要调用某些东西或从 UISwitch 激活触发该返回数据流。它可以像一个回调方法一样简单,以更新您保持状态的模型 - 这就是我通常开始的地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-23
    • 2010-09-24
    • 2020-04-04
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    相关资源
    最近更新 更多