【发布时间】:2021-10-20 11:04:51
【问题描述】:
如何知道应用程序是否从 SwiftUI 中的后台删除?有没有类似 Swift 的方法以及如何使用?
【问题讨论】:
如何知道应用程序是否从 SwiftUI 中的后台删除?有没有类似 Swift 的方法以及如何使用?
【问题讨论】:
我会研究Scene 协议。
我引用...
Scene 协议提供了场景修饰符,定义为协议 具有默认实现的方法,用于配置 场景。例如,您可以使用 onChange(of:perform:) 修饰符来 当值改变时触发动作。下面的代码清空一个 当窗口组中的所有场景都移动到 背景:
需要明确的是,这是 Apple 提供的示例...
struct MyScene: Scene {
@Environment(\.scenePhase) private var scenePhase
@StateObject private var cache = DataCache()
var body: some Scene {
WindowGroup {
MyRootView()
}
.onChange(of: scenePhase) { newScenePhase in
if newScenePhase == .background {
cache.empty()
}
}
}
}
我将它放在我的 App 文件中,如下例所示(使用 Core Data 实现):
import SwiftUI
@main
struct MyApp: App {
let persistenceController = PersistenceController.shared
@Environment(\.scenePhase) var scenePhase
var body: some Scene {
WindowGroup {
NavigationView()
.environment(\.managedObjectContext, persistenceController.container.viewContext)
}
.onChange(of: scenePhase) { _ in
persistenceController.save()
}
}
}
【讨论】: