【发布时间】:2020-06-04 14:51:18
【问题描述】:
有很多我想在预览中跳过的应用程序通常运行的代码。耗时且没有可见效果的代码(例如初始化音频设备)。我正在尝试弄清楚如何跳过它进行预览。
有一种简单的方法可以使用 DEBUG 宏仅在应用的生产版本中运行代码。但我不知道非预览版有什么类似的东西(因为预览版可能会构建与非预览版相同的代码)。
我认为在我的 ViewModel 中设置一个变量 previewMode 会起作用。这样我只能在 PreviewProvider 中将其设置为 true:
struct MainView_Previews: PreviewProvider {
static var previews: some View {
let vm = ViewModel(previewMode: true)
return MainView(viewModel: vm)
}
}
当我在 SceneDelegate 中创建 ViewModel 时,我可以将 previewMode 设置为 false:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
let vm = ViewModel(previewMode: false)
let mainView = MainView(viewModel: vm)
// Use a UIHostingController as window root view controller.
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: mainView)
self.window = window
window.makeKeyAndVisible()
}
}
这样我就可以在if !previewMode { ••• }中附上我不想运行的任何预览代码
不幸的是,代码仍在运行。显然,每当我的预览更新时,都会调用 scene() 函数。 :(
如何指定不运行预览的代码?
谢谢!
【问题讨论】:
-
答案在here.