SwiftUI:将应用程序初始化代码放在哪里,这样它就不会';你不能在预览中运行吗?

SwiftUI:将应用程序初始化代码放在哪里,这样它就不会';你不能在预览中运行吗?,swiftui,Swiftui,我正在试图找到不应在预览模式下运行的应用程序初始化代码的放置位置。我看到一些答案表明,以这种方式拆分应用程序行为(启动与预览)是不正确的,但我不同意:许多应用程序需要进行额外的设置(例如连接到数据库、启动后台任务、调用API等),这不适合预览(静态测试数据最有意义) 在预览模式下,Xcode实际运行应用程序并调用AppDelegate.ApplicationIDFinishLaunching,因此将触发启动后的任何初始化代码 运行应用程序设置代码以使其不在预览中运行的推荐方法是什么?我想你是说,

我正在试图找到不应在预览模式下运行的应用程序初始化代码的放置位置。我看到一些答案表明,以这种方式拆分应用程序行为(启动与预览)是不正确的,但我不同意:许多应用程序需要进行额外的设置(例如连接到数据库、启动后台任务、调用API等),这不适合预览(静态测试数据最有意义)

在预览模式下,Xcode实际运行应用程序并调用AppDelegate.ApplicationIDFinishLaunching,因此将触发启动后的任何初始化代码


运行应用程序设置代码以使其不在预览中运行的推荐方法是什么?

我想你是说,实时预览创建完整的窗口场景上下文并插入要预览的视图,因此调用所有应用程序和场景委派方法,包括实例化根
ContentView
但未显示根视图,即未调用其
主体


因此,您可以通过在根视图的
.onAppear
回调中放置代码、启动所有繁重的/network/etc.操作来实现您的目标。实际上,这对您的用户也有好处,因为这种方法可以快速启动应用程序并提供初始用户界面。

谢谢Asperi!这看起来是正确的方法,不幸的是,它仍然存在同样的问题;根视图的onAppear被调用,即使它没有被预览,例如我正在预览一些小视图。它实际上被呼叫了几次。我已经使用os_log()确认了这一点,并在Console.app中查看了消息。很奇怪,我会继续到处找的。谢谢你的帮助!