1

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

import SwiftUI

@main
struct SampleApp: App {

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

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

import SwiftUI

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

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

1 回答 1

1

为了让你的代码更新,SwiftUI 必须知道寻找变化。最常见的是,这是使用@ObservableObjector完成的@StateObject。现在,您只有一个名为myController-- SwiftUI 不会响应更改的常规属性。

您没有提供有关 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

于 2021-02-04T03:45:36.977 回答