SwiftUI - 创建多平台应用程序时,如何更改场景中的视图?

SwiftUI - When I create multiplatform app, how to change view in scene?

我正在尝试从 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

但是视图没有改变,我应该如何改变场景的根视图? 谢谢

SceneManager 设为 ObservableObject 并将 @State 包装器更改为 @ObservedObject

确保 state 是一个 @Published 变量。

https://developer.apple.com/documentation/combine/observableobject

或者您可以将 @State 更改为 @State var sceneManagerState = SceneManager.shared.state

SwiftUI 2.0 为此引入了 StateObject,所以请使用以下模式

@StateObject var sceneManager = SceneManager.shared

并制作

class SceneManager: ObservableObject {
   @Published var state: StateTypeHere
}