In meinem SwiftUI-Projekt sehe ich sowohl eine AppDelegate
Datei als auch eine SceneDelegate
Datei.
Was sind die Unterschiede zwischen ihnen?
Zum Beispiel zwischen den Methoden in SceneDelegate
scene(_:willConnectTo:options:)
und in der AppDelegate
application(_:didFinishLaunchingWithOptions:)
Antworten:
Die beiden Dateien sollen die Arbeit nach dem aufteilen, was zum Ausführen der App als Ganzes benötigt wird, und nach dem, was für eine "Instanz" benötigt wird, die das sichtbare Ausführen im Hintergrund unterstützt. Dies wäre so etwas wie eine einmalige Konfiguration einer Datenbank, aber die Anzeige verschiedener Wertesätze pro Fenster.
Sie können sich diese als globale und private Versionen vorstellen. Einer wird geteilt und der andere ist auf den einzelnen Eigentümer beschränkt. In gewisser Weise sind sie genau das, was Sie von den Namen erwarten würden.
Mit freundlicher Genehmigung von https://www.hackingwithswift.com/articles/193/whats-new-in-ios-13
quelle
Multiplattform
Zusätzlich zur Antwort von Abandoned Cart , Seit Xcode 11, haben Sie eine neue Option
Multiplatform
zur Auswahl als Startvorlage. Dort sehen Sie nur eine Datei, die Folgendes enthält:@main struct MyMultiplatformApp: App { var body: some Scene { WindowGroup { ContentView() } } }
Auf diese Weise weiß das System, wo der Code beginnen soll
@main
(in Swift 5.3), und es enthältWindowGroup
mehrere Fenster Ihrer App auf allen Apple-Plattformen. Sie müssen sich also keine Sorgen mehr um SceneDelegate und AppDelegate machen.Wenn Sie möchten, dass es dem alten App-Delegaten entspricht, z. B. wenn Sie seine Methoden verwenden möchten, sollten Sie entsprechende Benachrichtigungen abonnieren oder den
UIAppDelegateAdapter
Wrapper wie hier beschrieben verwendenquelle
UIAppDelegateAdapter
Wrapper verwenden, wie ich hier beschrieben habe @Ixx