现在,AppDelegate
和SceneDelegate
已经从SwiftUI中删除了,我应该把以前在SceneDelegate
和AppDelegate
中的代码放在哪里,Firebase config for ex?
所以我的AppDelegate
中有这个代码:
我现在应该把这个代码放在哪里?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
FirebaseConfiguration.shared.setLoggerLevel(.min)
FirebaseApp.configure()
return true
}
字符串
7条答案
按热度按时间eit6fx6z1#
这是SwiftUI生命周期的解决方案。使用Xcode 12 b/ iOS 14测试
字符串
t98cgbkg2#
覆盖
App
中的初始化器也可以工作:字符串
在这里找到更详细的文章:
mwecs4sa3#
你不应该把这种代码放在应用委托中,否则你最终会面对Massive App Delegate。相反,您应该考虑将代码重构为更有意义的部分,然后将正确的部分放在正确的位置。对于这种情况,您唯一需要做的就是确保代码在应用程序准备就绪后执行这些函数,并且只执行一次。所以
init
方法可能很棒:字符串
AppDelegate?
您可以拥有自己的自定义类并将其分配为
delegate
。但请注意,它不适用于在分配之前发生的事件。举例来说:型
后来:
型
观察通知
大多数
AppDelegate
方法实际上是在观察通知,你可以手动观察,而不是定义一个新的类。举例来说:型
原生
AppDelegate
Package 器你可以直接将app delegate注入到
@main
结构体中:型
注意:使用
AppDelegate
请记住,添加AppDelegate意味着您正在取消默认的多平台支持,并且您必须手动检查平台。
uhry853o4#
您还可以将新的ScenePhase用于AppDelegate和SceneDelegate具有的某些代码。就像去后台或变得活跃。起始
字符串
信用示例:https://wwdcbysundell.com/2020/building-entire-apps-with-swiftui/
tjrkku2a5#
我看到很多解决方案都将
init
用作didFinishLaunching
。但是,didFinishLaunching
在App
结构的init
之后被调用。方案一
使用在
App
结构中创建的View
的init
。当App
结构体的body
被调用时,didFinishLaunching
就发生了。字符串
方案二
我们可以创建一个块来通知我们何时调用
didFinishLaunching
。这允许在SwiftUI世界中保留更多代码(而不是在AppDelegate
中)。型
goucqfw66#
我也会建议在使用主要的
App
的init
方法为这一个,因为它似乎安全使用(有异议吗?).我通常做的,这可能是有用的分享,是有两个实用程序类型,结合
Builder
模式。字符串
然后我们有一些过程
型
最后,运行它们
型
看起来很不错,超级干净。
pjngdqdw7#
要使用SwiftUI生命周期,您需要使用
UIApplicationDelegateAdaptor
将符合UIApplicationDelegate
的类的示例注入到SwiftUI应用程序中。1.创建符合
UIApplicationDelegate
的AppDelegate类1.在
@main
结构中使用UIApplicationDelegateAdaptor
字符串
Xcode 13更新
在Xcode 13中,你不能再选择生命周期,它是从你选择的接口推断出来的。
x1c 0d1x的数据
Xcode 12测试版
请注意,下面的方法将停止跨平台支持,因此只有在您计划仅为iOS构建时才应使用。
还应该注意的是,这并不使用SwiftUI生命周期方法,而是允许您返回到UIKit生命周期方法。
在Xcode 12-beta中创建SwiftUI应用时,仍然可以拥有AppDelegate和SceneDelegate。
您只需要确保在创建应用程序时,您已经为生命周期选择了正确的选项即可。
的
生命周期选择UIKit App Delegate,会得到AppDelegate和SceneDelegate