Ant*_*ton 5 xcode preview swiftui
我的应用程序通常运行很多代码,我想在预览中跳过它们。代码耗时且没有可见效果(例如初始化音频设备)。我正在尝试弄清楚如何跳过它进行预览。
\n\n有一种简单的方法可以使用 DEBUG 宏仅在应用程序的生产版本中运行代码。但我不知道非预览版有什么类似的东西(因为预览版可能会构建与非预览版相同的代码)。
\n\n我认为previewMode
在我的 ViewModel 中设置一个变量 是可行的。这样我就可以只在 PreviewProvider 中将其设置为 true:
struct MainView_Previews: PreviewProvider {\n\n static var previews: some View {\n let vm = ViewModel(previewMode: true)\n return MainView(viewModel: vm)\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n当我在 SceneDelegate 中创建 ViewModel 时,我可以设置previewMode
为false
:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {\n\n let vm = ViewModel(previewMode: false)\n let mainView = MainView(viewModel: vm)\n\n // Use a UIHostingController as window root view controller.\n if let windowScene = scene as? UIWindowScene {\n let window = UIWindow(windowScene: windowScene)\n window.rootViewController = UIHostingController(rootView: mainView)\n self.window = window\n window.makeKeyAndVisible()\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n这样我就可以将任何我不想运行预览的代码包含在其中if !previewMode { \xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2 }
不幸的是代码仍在运行。显然,scene()
每当我的预览更新时,就会调用该函数。:(
如何指定不运行预览的代码?
\n\n谢谢!
\n我发现的唯一可行的解决方案是使用ProcessInfo.processInfo.environment
key 的值XCODE_RUNNING_FOR_PREVIEWS
。仅当在预览模式下运行时才将其设置为“1”:
let previewMode: Bool = ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"] == "1"
Run Code Online (Sandbox Code Playgroud)
请参阅此帖子。
归档时间: |
|
查看次数: |
1245 次 |
最近记录: |