我有一个 LoginView,如果用户未登录,则显示 RegisterView,如果用户已登录,则显示 ContentView:
struct LoginView: View {
@EnvironmentObject var userManager: UserManager
var body: some View {
Group {
if userManager.isRegistered {
ContentView()
} else {
RegisterView()
}
}
}
}
ContentView
具有三个ObservedObject
属性,它们使用 combine 从带有 rest api 的服务器获取内容。
struct ContentView: View {
@EnvironmentObject var userManager: UserManager
@ObservedObject var usersStore = UsersStore()
@ObservedObject var rolesStore = RolesStore()
@ObservedObject var elementsStore = ElementsStore()
var body: some View {
NavigationView {
ZStack {
Image("stell")
.resizable()
.aspectRatio(contentMode: .fit)
.opacity(0.1)
VStack(alignment: .leading, spacing: 5) {
NavigationLink(destination: UsersView(usersStore: usersStore) ) {
Text("Users")
}
NavigationLink(destination: RolesView(rolesStore: rolesStore)) {
Text("Roles")
}
NavigationLink(destination: ElementsView(elements: $elementsStore.elements)) {
Text("Elements")
}
}.font(.title).padding(20)
}.navigationBarTitle(Text("STELL"))
}
}
}
我遇到的问题是我想从任何observedObjects 中引用,例如当会话令牌过期userManager
时其余api 返回时。401 Unauthorized
然后我希望 ObservedObject 将isRegistered
标志设置为userManager
,false
以便RegisterView
自动显示。但我该怎么做呢?我无法userManager
在任何 ObservedObject 属性初始化程序中设置对的引用,因为编译器抱怨属性初始化程序在self
可用之前运行。