使用SwiftUI时异步填充/预填充多个用户可变的“@State”值?

使用SwiftUI时异步填充/预填充多个用户可变的“@State”值?,swiftui,combine,Swiftui,Combine,我有一些TextField和“.text”值,这些值应该由在“init()”(可以移动)中调用的方法填充,该方法使用网络中的struct数据异步调用完成处理程序 问题是。。。同时,用户也可以开始手动输入这些值,完成回调不应覆盖手动编辑的值 我不知道如何: 仅当用户尚未修改现有值时,才更新@State String变量的值以替换现有值。。。同时,最终用户也可以更改它们 一次更新来自同一请求的@State值的N个。一个请求用于拉入中的所有数据,因此将其映射为单个值,同时使其如上所述是可变的,这是目前

我有一些
TextField
和“.text”值,这些值应该由在“init()”(可以移动)中调用的方法填充,该方法使用网络中的
struct
数据异步调用完成处理程序

问题是。。。同时,用户也可以开始手动输入这些值,完成回调不应覆盖手动编辑的值

我不知道如何:

  • 仅当用户尚未修改现有值时,才更新
    @State String
    变量的值以替换现有值。。。同时,最终用户也可以更改它们
  • 一次更新来自同一请求的
    @State
    值的N个。一个请求用于拉入中的所有数据,因此将其映射为单个值,同时使其如上所述是可变的,这是目前的一个难题

  • 这似乎是联合收割机的工作,只是还不确定从何处开始。

    我假设用户编辑的是每个字段,而所有其他字段都应该单独处理


    将所有状态移动到
    可观察对象中
    ,使状态变量@Published,从每个设置中获取一个发布者,并从每个设置中创建一个接收器如果stateX!=initialStateXValue{stateXUserModified=true}在每个接收器内,并且在ObserveObject上有一个方法networkUpdate(loadedData:),该方法仅在关联的stateXUserModified为false时设置状态。

    我假设用户编辑的是每个字段,而所有其他字段都应该单独设置


    将所有状态移动到
    可观察对象中
    ,使状态变量@Published,从每个设置中获取一个发布者,并从每个设置中创建一个接收器如果stateX!=initialStateXValue{stateXUserModified=true}在每个接收器内,并在ObserveObject上有一个方法networkUpdate(loadedData:),该方法仅在关联的stateXUserModified为false时设置状态。

    非常有效,谢谢!虽然有一个包含这些东西的“可变状态”对象有点糟糕。例如,如果我想在出现错误时也显示一个
    警报
    ,那么我就必须将整个
    视图的单个
    可识别的
    变量也移到这个位置,不是吗?例如
    ($InteractiveEstate.alertPresentable){(presentable)->Alert in/*…*/}
    因为它似乎只支持每个
    视图中的第一个
    .alert
    ,至少在Xcode 11b5中是这样的?您也可以将整个内容放入属性包装器中,这样可以更好地使用和重用。我看不到出现错误与问题之间的联系(根据是否被用户修改来修改状态)。我听说可以使用
    文本(“”.hidden().alert
    )显示多个
    .sheet
    ,但这是另一个问题,非常有趣,谢谢!尽管有一个“可变状态”有点糟糕例如,如果我想在出现错误时也显示一个
    警报
    ,我就必须将整个
    视图的单个
    可识别的
    变量
    也移到其中,不是吗?例如
    .Alert($interactiveState.alertPresentable){(presentable)->Alert in/*…*/}
    因为它似乎只支持每个
    视图中的第一个
    .alert
    ,至少在Xcode 11b5中是这样的?您也可以将整个内容放入属性包装器中,这样可以更好地使用和重用。我看不到出现错误与问题之间的联系(根据是否被用户修改来修改状态)。我听说可以使用
    文本(“”.hidden().alert
    )显示多个
    .sheet
    ,但这是另一个问题