有没有办法在 iOS 14 应用程序生命周期中调用 SceneDelegate 方法?

Posted

技术标签:

【中文标题】有没有办法在 iOS 14 应用程序生命周期中调用 SceneDelegate 方法?【英文标题】:Is there any way to call SceneDelegate methods in iOS 14 app life cycle? 【发布时间】:2020-07-02 12:38:01 【问题描述】:

我们知道 Apple 已大大简化了 SwiftUI 应用程序生命周期 (WWDC20)。我看过 Paul Hudson 先生关于 SwiftUI 新变化的视频,他在视频中解释了如何在“@main or :App”结构中访问 AppDelegate 方法。

我想知道是否有任何方法可以访问 SceneDelegate 方法?

提前致谢。 :)

【问题讨论】:

【参考方案1】:

现在在 SwiftUI 2.0 生命周期中无法访问 SceneDelegate。一些回调可以与.onChange 一起用于[.active, .inactive, .background] 状态,如for example here

所示

或者...继续使用UIKit生命周期没有错

【讨论】:

感谢@Asperi 的澄清。【参考方案2】:

这是一个在 AppDelegate 中访问生命周期的例子。

struct PodcastScene: Scene 
    @Environment(\.scenePhase) private var phase

    var body: some Scene 
        WindowGroup 
            TabView 
                LibraryView()
                DiscoverView()
                SearchView()
            
        
        .onChange(of: phase)  newPhase in
            switch newPhase 
            case .active:
                // App became active
            case .inactive:
                // App became inactive
            case .background:
                // App is running in the background
            @unknown default:
                // Fallback for future cases
            
        
    

如果您添加像 Firebase 这样的框架配置,您可以覆盖 init 并在此处输入您的代码。

struct PodcastScene: Scene 

    init() 
        FirebaseApp.configure()
    

    var body: some Scene 
        WindowGroup 
            TabView 
                LibraryView()
                DiscoverView()
                SearchView()
            
        
    

【讨论】:

以上是关于有没有办法在 iOS 14 应用程序生命周期中调用 SceneDelegate 方法?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 应用的生命周期

Spring基础14——Bean的生命周期

iOS程序的生命周期

未读推送通知的生命周期

iOS 中钥匙串服务的生命周期

微信小程序:渲染流程、生命周期和触发顺序