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

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

【问题讨论】:

标签: ios swift swiftui


【解决方案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()
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-13
    • 2018-03-21
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多