首页 > 解决方案 > @EnvironmentObject 在传递到多个控制器时被多次跟踪?

问题描述

我有一个检查用户是否经过身份验证的视图。如果是,则 Mainview().Environmentobject(AuthService())。如果没有,则 AuthView().Environmentobject(AuthService())。在我的 AuthService 中,我有一个检查 userSession 的初始化程序。当用户登录时,我会从 init 部分获得两个打印件。当我注销并重新登录时,我得到 2 张打印件。如果我再次注销并重新登录,它将变为 4。似乎 AuthService 作为 envrionmentObject 被传递,有多个实例都在跟踪同一件事。这是有意的吗?我希望一个 AuthService 就像一个 StateManager ......

标签: swiftxcodeswiftui

解决方案


您可以创建一个实例并将其保存在属性中,例如

let authService = AuthService()

...
var body: some View {
  if authService.authnticated {
     MainView().environmentObject(authService)
  } else {
     AuthView().environmentObject(authService)
  }
}

推荐阅读