Как преобразовать жизненный цикл 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)
}
}
}