在 SwiftUI 2.0 中检测应用程序何时终止

Posted

技术标签:

【中文标题】在 SwiftUI 2.0 中检测应用程序何时终止【英文标题】:Detect when application is terminated in SwiftUI 2.0 【发布时间】:2021-01-24 07:34:40 【问题描述】:

我正在使用 Swift UI 2.0,目前的设置如下:

@main
struct MyApp: App 
    @Environment(\.scenePhase) private var scenePhase
    var body: some Scene 
        WindowGroup 
           InitialView()
        
        .onChange(of: scenePhase)  (newScenePhase) in
            switch newScenePhase 
            case .active:
                print("scene is now active!")
            case .inactive:
                print("scene is now inactive!")
            case .background:
                print("scene is now in the background!")
                
            @unknown default:
                print("sus")
            
        
    

这很好,但这些都不能解释应用程序终止的情况(即用户双击主页按钮并在应用程序上向上滑动)。我该如何解释这种情况?

我尝试实现 applicationWillTerminate(_:) 失败,因此我们将不胜感激。

谢谢!

【问题讨论】:

当用户滑动应用时没有调用函数。 【参考方案1】:

这是我从以前的项目中获得的。 您可以设置一个通知观察者来检查应用程序是否已“移至后台”,因此基本上是在用户退出应用程序时。

 init() 
        let notificationCenter = NotificationCenter.default
            notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: UIApplication.willResignActiveNotification, object: nil)
    

只需将其放入主视图控制器的 init 方法中,然后...

@objc func appMovedToBackground() 
    print("App moved to background")

【讨论】:

嗨,感谢您的回答,但这与 .inactive 情况类似,因为我们正在检测应用程序何时移至后台,而不是应用程序何时终止。我猜苹果的理念是,您应该在应用程序移动到后台而不是终止时立即保存所有用户数据/清理。

以上是关于在 SwiftUI 2.0 中检测应用程序何时终止的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 检测视图何时不可见(有点视图会消失)并停止发布者

如何检测 SwiftUI 视图何时被拖过

如何检测何时点击 TextField? (MacOS 上的 SwiftUI)

SwiftUI 检测 contextMenu 何时打开

如何检测手表操作系统是不是关闭了 ios 应用程序 SWIFTUI

检测损坏的png文件的有效方法?