检测何时从 SwiftUI 的后台打开特定视图?

Detect when a specific view is opened from the background in SwiftUI?

如果我有一个 SwiftUI 视图并将其置于后台(即在 iPhone 上按一次主页按钮)然后再次重新打开它,我想触发一些操作。

我的第一个想法是利用

.onAppear{}

修饰符,但是,经过一些测试,这不适用于在后台进入前台的视图。

似乎没有与 UIKit ViewWillAppear 等效的 SwiftUI。

我在想也许场景委托在这里很有用,因为它确实提供了功能:

    func sceneWillEnterForeground(_ scene: UIScene) {
        // Called as the scene transitions from the background to the foreground.
        // Use this method to undo the changes made on entering the background.
}

但我不确定是否有一种有效的方法可以使用此函数在视图从后台进入前台时触发视图中的操作。

如有任何想法,我们将不胜感激。

sceneWillEnterForeground 应该像详细的那样工作 https://developer.apple.com/documentation/uikit/app_and_environment/scenes/preparing_your_ui_to_run_in_the_foreground

或者,如果您只有特定组件关心前台操作,您可以订阅通知中心,详见https://www.hackingwithswift.com/books/ios-swiftui/how-to-be-notified-when-your-swiftui-app-moves-to-the-background

你可以使用这个修饰符来实现它:

.onReceive(NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in
            // your code
        }