![](/img/trans.png)
[英]In SwiftUI, can I pass @EnvironmentObject not in the SceneDelegate? Like pass it in any View
[英]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.