您根本不应该将这种代码放在应用程序委托中,否则您最终将面临大规模应用程序委托。相反,您应该考虑将代码重构为更有意义的部分,然后将正确的部分放在正确的位置。对于这种情况,您唯一需要做的就是确保在应用程序准备就绪后代码正在执行这些功能并且只执行一次。所以这个init
方法可能很棒:
@main
struct MyApp: App {
init() {
setupFirebase()
}
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
private extension MyApp {
func setupFirebase() {
FirebaseConfiguration.shared.setLoggerLevel(.min)
FirebaseApp.configure()
}
}
应用委托?
您可以拥有自己的自定义类并将其分配为delegate
. 但请注意,它不适用于分配之前发生的事件。例如:
class CustomDelegate: NSObject, UIApplicationDelegate {
static let Shared = CustomDelegate()
}
然后:
UIApplication.shared.delegate = CustomDelegate.Shared
观察通知
大多数AppDelegate
方法实际上是在观察您可以手动观察的通知,而不是定义一个新类。例如:
NotificationCenter.default.addObserver(
self,
selector: #selector(<#T##@objc method#>),
name: UIApplication.didBecomeActiveNotification,
object: nil
)
原生AppDelegate
包装器
您可以直接将应用委托注入到@main
结构中:
@UIApplicationDelegateAdaptor(CustomDelegate.self) var appDelegate
注意:使用AppDelegate
请记住,添加 AppDelegate 意味着您正在取消默认的多平台支持,并且您必须手动检查平台。