SceneDelegate和AppDelegate之间的区别

时间:2019-06-07 16:24:52

标签: swift swiftui

在我的SwiftUI项目中,我看到AppDelegate文件和SceneDelegate文件。

它们之间有什么区别?

例如SceneDelegate

中的方法之间
scene(_:willConnectTo:options:)

AppDelegate

application(_:didFinishLaunchingWithOptions:)

2 个答案:

答案 0 :(得分:7)

这两个文件用于按整体运行应用程序所需的内容以及支持在后台运行的一个“实例”所需的内容进行拆分。就像一次配置数据库,但按窗口显示不同的值集一样。

您可以将它们视为全局和私有版本。一个是共享的,另一个则限于个人所有者。从某种意义上说,它们正是您所期望的名称。

  

正在提供多窗口支持

     

下次创建新的Xcode项目时,您将看到AppDelegate   分为两部分:AppDelegate.swift和SceneDelegate.swift。这是一个   iPadOS提供了新的多窗口支持的结果,并且   有效地将应用程序委托的工作一分为二。

     

从iOS 13开始,您的应用程序代表应:

     
      
  1. 设置在应用程序运行期间所需的所有数据。
  2.   
  3. 响应所有与应用有关的事件,例如与您共享文件。
  4.   
  5. 注册外部服务,例如推送通知。
  6.   
  7. 配置您的初始场景。
  8.   
     

相反,场景委托在那里处理您的一个实例   应用的用户界面。因此,如果用户创建了两个窗口   您的应用程序有两个场景,两个场景都由同一个应用程序代理支持。

     

请记住,这些场景旨在独立于   彼此。因此,您的应用程序不再移至后台,   但是相反,各个场景都可以–用户可以将其中一个移到   背景,同时保持另一个开放状态。

https://www.hackingwithswift.com/articles/193/whats-new-in-ios-13

提供

答案 1 :(得分:2)

多平台

除了废弃购物车的答案之外,自Xcode 11起,您还有一个名为Multiplatform的新选项可以选择作为起始模板。在那儿,您只会看到文件包含:

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

这是系统知道从@main开始代码的位置(在Swift 5.3中),它包含WindowGroup,它管理所有Apple平台中应用程序的多个窗口。因此,您不再需要担心SceneDelegate和AppDelegate。

如果您需要它像旧的应用程序委托,例如,当您想使用其方法时,则应订阅相应的通知,或将UIAppDelegateAdapter包装器用作{{ 3}}