我正在尝试从SwiftUI创建一个多平台应用程序。
这是我的代码在
@main
struct MyApp: App
@State var sceneManager = SceneManager.shared
var body: some Scene {
WindowGroup {
if sceneManager.state == .landing {
LandingPageView()
} else if sceneManager.state == .historyRecord {
HistoryRecordView()
}
}
}
登录成功后,我将把SceneManager.shared属性从.landing
更改为.historyRecord
但是视图没有改变,如何更改场景的根视图? 谢谢
答案 0 :(得分:1)
将SceneManager
设为ObservableObject
,然后将@State
包装器更改为@ObservedObject
。
确保state
是一个@Published
变量。
https://developer.apple.com/documentation/combine/observableobject
或者您可以将@State
更改为@State var sceneManagerState = SceneManager.shared.state
答案 1 :(得分:1)
SwiftUI 2.0 为此目的引入了StateObject
,所以请遵循以下模式
@StateObject var sceneManager = SceneManager.shared
并制作
class SceneManager: ObservableObject {
@Published var state: StateTypeHere
}