【发布时间】:2020-12-08 07:13:39
【问题描述】:
我正在尝试通过一系列嵌套类来管理用户状态。
应用程序的基本视图使用globalState 环境对象。该对象允许用户进出其他视图。
@EnvironmentObject var globalState: GlobalState
// View Code
Text("Logged In").opacity(globalState.user.isLoggedIn ? 1 : 0)
Text("Please Sign In").opacity(globalState.user.isLoggedIn ? 0 : 1)
那么GlobalState 类仅包含User 类。 user 字段在其他地方初始化(不,我没有引用不同的 user 对象)。
class GlobalState: ObservableObject {
@Published public var user: User // Inited somewhere else
}
class User {
@Published var isLoggedIn: Bool = false
}
User 类在 inited 时自动提取有关用户的数据。在应用启动时,从钥匙串(如果存在)中提取用户信息。如果可以从现有数据创建用户,则该用户的isLoggedIn 设置为true。
我知道我没有重复的对象,因为GlobalState 的查看代码中的globalState.user 的内存地址与为用户更新isLoggedIn 时的内存地址相同。
我通过使用两个级别的@Published 变量感到原力受到干扰,但一切都应该解决吗?
GlobalState 中的视图代码并没有更新。有谁知道为什么?一些我缺少的组合柔术?
【问题讨论】: