swift 场景委托和应用委托之间的差异

zzoitvuj  于 2022-12-26  发布在  Swift
关注(0)|答案(3)|浏览(202)

在我的SwiftUI项目中,我看到AppDelegate文件和SceneDelegate文件。
它们之间有什么不同?
例如,在SceneDelegate中的方法之间

scene(_:willConnectTo:options:)

AppDelegate

application(_:didFinishLaunchingWithOptions:)
fnatzsnv

fnatzsnv1#

这两个文件的目的是将工作分成两部分,一部分是运行整个应用程序所需的,另一部分是支持在后台可视运行的“示例”所需的,这就像配置一次数据库,但在窗口中显示不同的值集。
你可以把它们看作是全局的和私有的两个版本。一个是共享的,另一个是限制于个人所有者的。在某种程度上,它们正是你所期望的名称。
多窗口支持正在出现
下次创建新的Xcode项目时,您将看到AppDelegate已一分为二:swift和SceneDelegate. swift。这是iPadOS新增多窗口支持的结果,有效地将应用程序委托的工作一分为二。
从iOS 13开始,您的应用代理应:
1.设置应用程序运行期间所需的任何数据。
1.响应关注应用的任何事件,例如与您共享的文件。
1.注册外部服务,如推送通知。
1.配置初始场景。
相反,场景代理用于处理应用用户界面的一个示例。因此,如果用户创建了两个显示应用的窗口,则您将拥有两个场景,它们都由同一个应用代理支持。
请记住,这些场景被设计为彼此独立工作。因此,您的应用程序不再移动到后台,而是单个场景移动-用户可能会将一个场景移动到后台,同时保持另一个打开。
https://www.hackingwithswift.com/articles/193/whats-new-in-ios-13提供

brc7rcf0

brc7rcf02#

AppDelegate负责处理应用程序级事件(如应用程序启动)、应用程序生命周期和设置。
SceneDelegate负责处理屏幕(Windows或Scenes)上显示的内容,并管理应用的显示方式。
scene(_:willConnectTo:options:)是UISceneSession生命周期中调用的第一个方法,该方法将创建一个新的UIWindow,设置根视图控制器,并使该窗口成为要显示的关键窗口。
application(_:didFinishLaunchingWithOptions:)在应用程序启动和应用程序设置完成时调用。在iOS 13早期版本中,我们可能使用此方法配置UIWindow对象,并将ViewController示例分配给UIWindow对象以使其显示在屏幕上。从iOS 13开始,如果您的应用程序具有场景,则AppDelegate不再负责处理此问题,而是移到SceneDelegate。
出发地:https://medium.com/@kalyan.parise/understanding-scene-delegate-app-delegate-7503d48c5445

k5ifujac

k5ifujac3#

多平台

除了 Abandoned Cart 的答案之外,Xcode 11之后,你有了一个新的选项Multiplatform来选择作为起始模板,在那里你只会看到一个包含以下内容的文件:

@main
struct MyMultiplatformApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

这就是为什么系统知道从哪里开始@main(Swift 5.3中)的代码,它包含WindowGroup,可以在所有苹果平台上管理应用的多个窗口。所以你不必再担心SceneDelegate和AppDelegate。
如果您需要它类似于旧的应用程序委托(例如,当您想要使用其方法时),则应订阅相应的通知UIAppDelegateAdapter Package 器用作I described here

相关问题