繁体   English   中英

如何更改 SwiftUI 应用程序(无 SceneDelegate 或 AppDelegate)中的根视图?

[英]How can I change the root view in a SwiftUI app (no SceneDelegate or AppDelegate)?

我正在努力替换纯 SwiftUI 应用程序中的根视图。 没有 SceneDelegate 或 AppDelegate。 该应用程序的入口点最初如下所示。

import SwiftUI

@main
struct SampleApp: App {

    var body: some Scene {
        WindowGroup {
            MainTabView()
        }
    }
}

我找不到任何不利用旧“代表”的资源。 我能想到的最好的办法是绑定到一个可观察的 object,但由于某种原因它不起作用。

import SwiftUI

@main
struct SampleApp: App {
    let myController = MyController.shared

    var body: some Scene {
        WindowGroup {
            if myController.isUserFullscreen {
                FullScreenView()
            } else {
                MainTabView()
            }
        }
    }
}

为了更新您的代码,SwiftUI 必须知道寻找更改。 最常见的是,这是通过@ObservableObject@StateObject完成的。 现在,您只有一个名为 myController 的常规属性myController不会知道响应更改。

您没有提供有关 MyController 是什么的任何信息,但我可以做出一些假设并将其转换为 ObservedObject:

class MyController : ObservableObject {
  static let shared = MyController()
  @Published var isUserFullscreen = false
}

然后,在您看来,您可以将您的财产重新定义为:

@ObservedObject var myController = MyController.shared

然后,您的视图应该知道响应@ObservableObject 的@Published 属性的更改。

这里有更多关于@ObservableObject 的阅读: https://www.hackingwithswift.com/quick-start/swiftui/observable-objects-environment-objects-and-published

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM