如何制作一个关闭使用 UIHostingController/SwiftUI 呈现的视图的按钮?

How to make a button that dismisses a view presented using UIHostingController/SwiftUI?

我有一个相当广泛的项目,我从 UIKit 开始,现在我决定使用 SwiftUI 来制作一些简单的表单页面,但我需要在 SwiftUI 中制作一个按钮来关闭当前显示的视图以下代码:

   func goToSchedule() {
        let vc = UIHostingController(rootView: ScheduleView())
        if let topController = UIApplication.topViewController() {
            topController.present(vc, animated: true, completion: nil)
        }
    }

您可以通过保留对它的引用来关闭它。因此,将 vc 保持在更多 public 范围内,并在需要时将其关闭。

var vc: UIViewController

或类似这样的内容:

if let topController = UIApplication.topViewController() {
    topController.presentedViewController?.dismiss(animated: true)
}

如果我正确理解了代码快照,那么 .topViewController() 将在显示 ScheduleView 时显示 UIHostingViewConroller,所以它应该像

var body: some View {
    // ...
    // somewhere ...

    Button("Close") {
        if let topController = UIApplication.topViewController() {
            topController.dismiss(animated: true)
        }
    }
}