Как преобразовать жизненный цикл UIKit в жизненный цикл SwiftUI в iOS 14 (Xcode 12 Beta)

В настоящее время я работаю над приложением SwiftUI, в котором использую SceneDelegate а также AppDelegate. Я хотел бы знать, как я могу преобразовать жизненный цикл изUIKit к SwiftUI тот, где есть App структура и с scenes и т.п.

Также я хотел бы знать, как обслуживать CoreData и PersistentContainers и внедрять их в нашу среду.

Также я использовал UIApplicationDelegateAdapter вводить AppDelegate но @main дает мне ошибку

'main()' доступен только в iOS 14.0 или новее

Я использую @available (iOS 14.0, *) в начале:

import SwiftUI

@available(iOS 14.0, *)
@main

struct MyApp: App {

    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

Делая это так, где SceneDelegateкод идет. Я до сих пор не понимаю, как проходит это преобразование. Я не видел, чтобы Apple говорила об этом на своих сессиях или что-то в этом роде. Помощь будет очень признательна.

2 ответа

куда идет код SceneDelegate.

@available(iOS 14.0, *)
@main
struct MyApp: App {

    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    @Environment(\.scenePhase) private var scenePhase

    var body: some Scene {
        WindowGroup {         // << this is a scene
          ContentView()
            .onChange(of: scenePhase) { phase in
              switch phase {
                case .active:
                    print(">> your code is here on scene become active")
                case .inactive:
                    print(">> your code is here on become inactive")
                case .background:
                    print(">> your code is here on go in background")
                default:
                    print(">> do something else in future")
             }
          }
        }
    }
}

Установите среду в ContentView следующим образом:

import SwiftUI
import CoreData

@main
struct MasterDetailApp: App {
  @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    
    var body: some Scene {
        WindowGroup {
            ContentView().environment(\.managedObjectContext, appDelegate.persistentContainer.viewContext)
        }
    }
}
Другие вопросы по тегам