[英]Trying to pass state variable to automatically update view in SwiftUI
我有一个变量,它保存 state 的某种类型的 session 是否处于活动状态。 这用于确定显示哪个视图。 我想让我的view model发一个文档,切换这个state,然后自动更新view。 但是,视图没有更新。
所以这是我所拥有的视图的基础层。 sessionState一开始是false,默认是StartSessionView,初始化一个session,如果是active,就去GroupSessionView。
struct SessionView: View {
@State var sessionState = false
@ViewBuilder
var body: some View {
if sessionState {
StartSessionView(sessionState: $sessionState)
} else {
GroupSessionView(sessionState: $sessionState)
}
}
}
StartSessionView 页面具有以下代码。 这里重要的是 sessionManager 视图 model。我使用 Session object(不重要,因为该部分正在工作)和 sessionState 初始化 SessionManager。
struct StartSessionView: View {
@State var sessionManager = SessionManager(session: Session(sessionType: ""), sessionState: false)
@ObservedObject var userViewModel = AuthViewModel()
@Binding var sessionState: Bool
var body: some View {
VStack(alignment: .leading, spacing: 40) {
Button {
sessionManager = SessionManager(session: Session(sessionType: dropdownValue), sessionState: sessionState)
sessionManager.startSession()
} label: {
Text("Do stuff")
}
}
}
}
最后,这是视图 model。
class SessionManager: ObservableObject {
@State var sessionState: Bool
let session: Session
init(session: Session, sessionState: Bool) {
self.session = session
self.sessionState = sessionState
}
func startSession() {
var messageData = ["sessionType": session.sessionType]
let document = Firestore.firestore()
.collection("sessions")
.document()
document.setData(messageData) {error in
if let error = error {
print(error)
return
} else { sessionState.toggle }
}
}
}
因此,当在这里切换 sessionState 时,我希望将其传递回 SessionView 结构,看到 sessionState = true,并将 go 传递给 GroupSessionView。 我不确定如何通过这么多层传递这些数据。
哎呀,看来你错过了什么。 @State only works with variable, structs.. and not a class in this case
。 如果你想将数据传递给另一个视图,你可以使用 SwiftUI 中的环境。
struct SessionView: View {
@State var sessionState = false
@StateObject var someThingKeepManager = SomeThingKeepManager()
@ViewBuilder
var body: some View {
ZStack {
if sessionState {
StartSessionView(sessionState: $sessionState)
} else {
GroupSessionView(sessionState: $sessionState)
}
}
.environmentObject(someThingKeepManager)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.