【问题标题】:swift ui handle property changed in observableObjectswift ui 句柄属性在 observableObject 中更改
【发布时间】:2021-05-27 21:49:56
【问题描述】:

所以 - 我在屏幕上有一个文本字段 - 数据异步加载 - 所以我创建了 ObservableObject 和一个已发布的字段,并成功地将它绑定到视图:

class Blah : ObservableObject
{
    @Published var value : Double? = nil
 
    init()
    { 
         load_variable_async().then {result in self.value = result }
    }
}

完美运行 - 视图反映了变量的值和所有内容。
但是 - 我希望它双向工作。已发布的 似乎 是一个双向包装器,所以我想添加如下内容:

init()
{
    load_variable_async().then {result in self.value = result }
    value.when_changed { new_value in asynchronously_save( variable) }
}

我找不到任何方法。我在谷歌上搜索的所有内容都会在 view 中放置一个接收器或一些保存调用 - 这对我来说似乎完全错误......如果我在一个地方阅读它,我想把它写进去同一个地方 - 如果我已经将变量绑定到文本字段,并且绑定是双向的,那么已经建立了足够的连接

那我做错了什么?如何对在我的“模型”对象中设置的值做出反应,而无需将某种保存或其他操作显式放入视图中?

【问题讨论】:

  • 那么,您希望视图中的文本字段在模型中发布的属性更改时更新,对吗?
  • 我看不出你的第二个例子有什么问题,除了你使用了一堆像 asynchronously_save 这样不清楚他们在做什么的包装器——也许他们是您遇到问题的原因是什么?你能想出一个说明问题的minimal reproducible example吗?

标签: swift swiftui


【解决方案1】:

所以我找到了我想要的解决方案 - 来自模型的绑定 -> 文本字段始终有效,但来自文本字段的值 -> 模型我无法正常工作。神奇的似乎是这个关键字“willSet”

   @Published var value : Double? = nil {
       willSet( new_value ) {
             print("going to save asynchronously now")
       }}

神奇地工作。

【讨论】:

    猜你喜欢
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 2020-07-06
    相关资源
    最近更新 更多