xcode12新建swiftUI项目,可以从简单的App结构定义开始构建一个新的基于 SwiftUI 的应用程序:
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
RootView()
}
}
}
虽然上述AppAPI 非常简洁和轻量级,但它对生命周期监听的灵活性远不如UIApplicationDelegate
——这是之前 iOS 和 tvOS 应用程序的首选入口点:
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
...
}
通过翻阅文档找到UIApplicationDelegateAdaptor
属性包装器。我们所要做的就是在我们的App结构中的任何地方声明这样一个属性,使用我们想要的任何名称,SwiftUI 将自动检测它并使用指定的类型作为应用程序的委托:
@main
struct MyApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
var body: some Scene {
...
}
}
也可以用@Environment中的scenePhase变量来监听
@Environment(\.scenePhase) private var scenePhase
var body: some Scene {
WindowGroup {
ContentView()
}
.onChange(of: scenePhase) { s in
switch s {
case .background:
print("")
case .inactive:
print("")
case .active:
print("")
@unknown default:
print("")
}
}
}