我的应用正常运行很多代码,我想在“预览”中跳过这些代码。耗时且没有可见效果的代码(例如初始化音频设备)。我试图弄清楚如何跳过预览。
只有一种简单的方法可以使用DEBUG宏在应用的生产版本中运行代码。但是我不知道非Preview版本有什么类似的东西(因为Preview可能与非Preview版本生成相同的代码)。
我以为在我的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()
函数。 :(
如何指定不为预览运行的代码?
谢谢!
我的应用正常运行很多代码,我想在“预览”中跳过这些代码。耗时且没有可见效果的代码(例如初始化音频设备)。我正在尝试找出...
实际上,实时预览模式运行时与模拟器调试模式运行时没有太大区别。当然,这是为了给我们快速(尽可能)的代码执行反馈。
此方法不再有效(Xcode 11.5)