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

时间:2020-09-01 15:57:37

标签: ios swift xcode swiftui multiplatform

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

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

2 个答案:

答案 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
}