如何在 iOS 14 (Xcode 12 Beta) 中从 UIKit 生命周期转换为 SwiftUI 生命周期

Osa*_*eem 11 ios appdelegate swiftui xcode12

我目前正在开发我正在使用的 SwiftUI 应用程序SceneDelegateAppDelegate. 我想知道我可以在生命周期的转换UIKitSwiftUI一个地方有一个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()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做,SceneDelegate代码去哪儿了。我仍然很困惑这种转换是如何进行的。我还没有看到 Apple 在他们的会议或任何事情中谈论过这个问题。帮助将不胜感激。

Asp*_*eri 6

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")
             }
          }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


mal*_*hal 6

在 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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)