SwiftUI 生命周期监控方案

xcode12新建swiftUI项目,可以从简单的App结构定义开始构建一个新的基于 SwiftUI 的应用程序:

@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            RootView()
        }
    }
}

虽然上述AppAPI 非常简洁和轻量级,但它对生命周期监听的灵活性远不如UIApplicationDelegate——这是之前 iOS 和 tvOS 应用程序的首选入口点:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    ...
}

通过翻阅文档找到UIApplicationDelegateAdaptor 属性包装器。我们所要做的就是在我们的App结构中的任何地方声明这样一个属性,使用我们想要的任何名称,SwiftUI 将自动检测它并使用指定的类型作为应用程序的委托:

@main
struct MyApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate

    var body: some Scene {
        ...
    }
}

也可以用@Environment中的scenePhase变量来监听

 @Environment(\.scenePhase) private var scenePhase
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    
        .onChange(of: scenePhase) { s in
            switch s {
            case .background:
                print("")
            case .inactive:
                print("")
            case .active:
                print("")
            @unknown default:
                print("")
            }
        }
        
    }