如何动态创建 SwiftUI 场景?

Nig*_*LxD 8 scene ios swiftui ipados

我一直在研究 SwiftUI 并从这个WWDC20 视频中了解应用程序、场景和视图。我试图通过一个示例应用程序来理解这些概念,该应用程序显示电影列表并帮助预订电影。

iOS和iPadOS SwiftUI项目有以下App:

@main
struct HelloIOSSwiftUIApp: App {

    // Attach the app delegate to the swiftUI app
    @UIApplicationDelegateAdaptor
    var appDelegate: AppDelegate
    
    var body: some Scene {
        MovieListScene()
    }
}
Run Code Online (Sandbox Code Playgroud)

从上面的代码可以推断出HelloIOSSwiftUIApp有一个名为MovieListScene的场景。因此,要向应用程序添加新场景,

@main
struct HelloIOSSwiftUIApp: App {

    // Attach the app delegate to the swiftUI app
    @UIApplicationDelegateAdaptor
    var appDelegate: AppDelegate
    
    var body: some Scene {
        MovieListScene()
        BookMovieScene()
            .handlesExternalEvents(matching: ["book movie"])
        
    }
}
Run Code Online (Sandbox Code Playgroud)

现在声明了两个场景,SwiftUI 启动应用程序并显示第一个场景的内容。

在上面的两个示例中,应用程序的场景都是在编译时声明的。那么,如何动态地向应用程序添加/删除新场景呢?我想从配置文件中读取一些数据并决定是否应显示特定场景。我怎样才能实现这种行为?或者应用程序应该在编译时声明所有可能的场景(如上所示)?

我知道 SwiftUI 视图可以通过使用@State@StateObject@ObservedObject属性@Published包装器在运行时更新。SwiftUI 视图是其状态的函数......因此更新状态可以更改视图。我怎样才能对场景做同样的事情?