swift - @EnvironmentObject 在传递到多个控制器时被多次跟踪?
问题描述
我有一个检查用户是否经过身份验证的视图。如果是,则 Mainview().Environmentobject(AuthService())。如果没有,则 AuthView().Environmentobject(AuthService())。在我的 AuthService 中,我有一个检查 userSession 的初始化程序。当用户登录时,我会从 init 部分获得两个打印件。当我注销并重新登录时,我得到 2 张打印件。如果我再次注销并重新登录,它将变为 4。似乎 AuthService 作为 envrionmentObject 被传递,有多个实例都在跟踪同一件事。这是有意的吗?我希望一个 AuthService 就像一个 StateManager ......
解决方案
您可以创建一个实例并将其保存在属性中,例如
let authService = AuthService()
...
var body: some View {
if authService.authnticated {
MainView().environmentObject(authService)
} else {
AuthView().environmentObject(authService)
}
}
推荐阅读
- python - Jinja2 for PyCharm?
- flutter - 是否可以为使用 CupertinoApp() 的应用程序使用 Get 包?
- r - 使用R中的条件对象将“立即”设置为“真”?
- python - 如何拆分成二维数组
- graphql - 通过 URI 查询的 WPGraphQL 对自定义帖子类型返回 null
- php - 在php中获取二叉树中的最后一个左孩子
- python - Evenly divide a list of integers into a equal or larger list of integers with id's
- scala - 无法在 Scala 中编译和运行多个文件
- r - 如何解决此错误 - 缺少 $ 插入?
- mfc - MFC 对话框 - 如何调整和重新设置客户端“视图”矩形?