以Xcode简化SwiftUI预览

问题描述 投票:1回答:2

我的应用正常运行很多代码,我想在“预览”中跳过这些代码。耗时且没有可见效果的代码(例如初始化音频设备)。我试图弄清楚如何跳过预览。

只有一种简单的方法可以使用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 swiftui preview
2个回答
1
投票

实际上,实时预览模式运行时与模拟器调试模式运行时没有太大区别。当然,这是为了给我们快速(尽可能)的代码执行反馈。


1
投票

此方法不再有效(Xcode 11.5)

© www.soinside.com 2019 - 2024. All rights reserved.