AppDelegate вернулся

Больше нет необходимости явно создавать AppDelegate с новым жизненным циклом SwiftUI. Однако могут быть ситуации, когда AppDelegate все еще может потребоваться. Этот пост объясняет, как.

Этот пост является продолжением моего первого поста Как я запускаю проект SwiftUI».

При создании приложения для серии руководств Программирование дронов DJI я столкнулся со странной проблемой.

Мое приложение вело себя недетерминировано, кошмар каждого программиста. Иногда это работало так, как ожидалось, а иногда нет. Я объяснил все детали в этом посте на Stackoverflow.

Я мог только заставить его снова представить «старый добрый» AppDelegate.

Итак, всякий раз, когда возникает необходимость использовать AppDelegate в вашем новом блестящем приложении SwiftUI, см. план ниже.

Не стесняйтесь угостить меня кофе, если вам понравился этот пост.

import SwiftUI

class AppDelegate: UIResponder, UIApplicationDelegate {

    var someClass = SomeClass()

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        someClass.doSomethingThatWouldNotWorkWithoutTheAppDelegate()
        return true
    }
}

@main
struct MyApp: App {
    
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    @Environment(\.scenePhase) private var scenePhase
    
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .onChange(of: scenePhase) { (newScenePhase) in
            switch newScenePhase {
            case .active:
                print("active")
            case .background:
                print("background")
            case .inactive:
                print("inactive")
            @unknown default:
                print("default")
            }
        }
    }
}

Ресурсы