使用 SwiftUI 时异步 populate/pre-fill 多个用户可变的“@State”值?
Asynchronously populate/pre-fill multiple, user mutable `@State` values when using SwiftUI?
我有一些 TextField(s)
带有“.text”值,这些值应该由“init()”中调用的方法填充(可以移动)它使用来自网络的 struct
数据异步调用完成处理程序。
问题是...用户也可以同时开始手动输入并且完成回调不应覆盖手动编辑的值.
我不确定如何:
- 更新
@State String
变量的值以仅在用户尚未修改现有值时替换现有值...而 还有 有它们最终用户可变。
- 一次更新来自同一请求的 N 个
@State
值。一个请求用于拉取 所有 的数据,因此映射到单个值同时如上所述使其可变是目前令人头疼的问题。
似乎是 Combine 的工作,只是还不确定从哪里开始。
我假设用户编辑是按字段进行的,所有其他字段都应该保持不变。
将所有状态移动到 ObservableObject
中,创建状态变量 @Published,从每个状态中获取一个发布者并从每个状态中创建一个接收器设置一个变量 if stateX != initialStateXValue { stateXUserModified = true }
在每个接收器中,并在 ObservableObject 上有一个方法 networkUpdate(loadedData:) ,如果关联 stateXUserModified 为假。
我有一些 TextField(s)
带有“.text”值,这些值应该由“init()”中调用的方法填充(可以移动)它使用来自网络的 struct
数据异步调用完成处理程序。
问题是...用户也可以同时开始手动输入并且完成回调不应覆盖手动编辑的值.
我不确定如何:
- 更新
@State String
变量的值以仅在用户尚未修改现有值时替换现有值...而 还有 有它们最终用户可变。 - 一次更新来自同一请求的 N 个
@State
值。一个请求用于拉取 所有 的数据,因此映射到单个值同时如上所述使其可变是目前令人头疼的问题。
似乎是 Combine 的工作,只是还不确定从哪里开始。
我假设用户编辑是按字段进行的,所有其他字段都应该保持不变。
将所有状态移动到 ObservableObject
中,创建状态变量 @Published,从每个状态中获取一个发布者并从每个状态中创建一个接收器设置一个变量 if stateX != initialStateXValue { stateXUserModified = true }
在每个接收器中,并在 ObservableObject 上有一个方法 networkUpdate(loadedData:) ,如果关联 stateXUserModified 为假。