如何知道应用程序是不是从 SwiftUI 中的后台删除?

Posted

技术标签:

【中文标题】如何知道应用程序是不是从 SwiftUI 中的后台删除?【英文标题】:How to know if app is removed from background in SwiftUI?如何知道应用程序是否从 SwiftUI 中的后台删除? 【发布时间】:2021-10-20 11:04:51 【问题描述】:

如何知道应用程序是否从 SwiftUI 中的后台删除?有没有类似 Swift 的方法以及如何使用?

【问题讨论】:

developer.apple.com/documentation/uikit/uiapplicationdelegate 【参考方案1】:

我会研究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()
        
    

【讨论】:

以上是关于如何知道应用程序是不是从 SwiftUI 中的后台删除?的主要内容,如果未能解决你的问题,请参考以下文章

我如何知道 SwiftUI 按钮是不是已启用/禁用?

从 SwiftUI 中的导航栏中删除后退按钮文本

如何从 SwiftUI 列表和领域中删除数据

ios应用程序在后台使用SwiftUI时如何播放SystemSound

SwiftUI - 多选列表(不是自定义列表)

如何从 SwiftUI 中的 Bundle 中的有效路径或 URL 将图像加载到 Image()?