在 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 检测视图何时不可见(有点视图会消失)并停止发布者
如何检测何时点击 TextField? (MacOS 上的 SwiftUI)