Ios 如何在多页SwiftUI用户注册之间传递用户输入数据?

Ios 如何在多页SwiftUI用户注册之间传递用户输入数据?,ios,swiftui,Ios,Swiftui,考虑一个iOS SwiftUi应用程序,它总共有3个页面用于用户注册过程 包含电子邮件输入和“继续”按钮的第一页 包含用户名输入和继续按钮的第二页 包含密码输入和注册按钮的第三页 捕获用户输入数据并将其发送到后端的最佳实践是什么 我最初的假设是将用户输入的数据本地存储在第1页和第2页中。然后点击第3页上的注册按钮,获取先前本地存储的数据以及第3页的数据,并将其作为一个发送到后端。然后清除本地存储 其他想法是使用@EnvironmentObject来存储用户输入,但这是否安全/推荐?这里没有正

考虑一个iOS SwiftUi应用程序,它总共有3个页面用于用户注册过程

  • 包含电子邮件输入和“继续”按钮的第一页
  • 包含用户名输入和继续按钮的第二页
  • 包含密码输入和注册按钮的第三页
捕获用户输入数据并将其发送到后端的最佳实践是什么

我最初的假设是将用户输入的数据本地存储在第1页和第2页中。然后点击第3页上的注册按钮,获取先前本地存储的数据以及第3页的数据,并将其作为一个发送到后端。然后清除本地存储


其他想法是使用@EnvironmentObject来存储用户输入,但这是否安全/推荐?

这里没有正确的答案,但我们可以从react世界中获得灵感,因为SwiftUI主要基于react。现在流行的方法是创建一个单一的真相来源,即一个容纳你的共享状态的“商店”

你如何与商店沟通?最简单的方法是创建一个类,在AppDelegate中实例化该类,然后将该实例向下传递给视图层次结构。您可以在每个视图上显式地将其作为属性传递,也可以使用SwiftUI的EnvironmentObject隐式地传递它

下面是一个简单的商店可能的样子:

class AppState: ObservableObject {
  @Published var firstName: String?
  @Published var lastName: String?

  func submit() {
    // submit first and last name to the API
  }
}
一个类似但更健壮的实现是使用一种非常流行的模式Redux。在这种方法中,通过在reducer函数中触发操作和修改状态,将存储的变异与存储的状态解耦。您可以在这里看到一个使用Combine以快捷方式实现Redux的很酷的示例:

另外,请看一下这种方法,了解它是如何通过使用特定于密钥路径的发布服务器来定义哪些存储子状态更改应影响组件来优化存储连接组件的: