如何检查SwiftUI是否处于预览模式?

时间:2019-11-08 03:33:35

标签: ios swift xcode if-statement swiftui

是否可以检查SwiftUI应用是否处于预览模式?例如,您可以使用#if DEBUG检查您的应用程序是处于开发模式还是生产模式。您可以执行类似的操作来检查是否正在预览吗?

5 个答案:

答案 0 :(得分:20)

您可以使用ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"]进行检测。在画布上运行时,该值将在运行时为"1"

答案 1 :(得分:1)

如果您像我一样正在寻找一个环境变量,用于在构建脚本中使用 xcode 在构建 SwiftUI 预览时设置的脚本,结果是 ENABLE_PREVIEWS

当我的脚本更新 Info.plist 文件时,SwiftUI 暂停预览。为了解决这个问题,如果我们在预览版本中,我会在某个时候退出脚本。

if [ "${ENABLE_PREVIEWS}" = "YES" ]; then
  exit 0;
fi

答案 2 :(得分:0)

肯定没有等于DEBUG的东西。我认为这种意图正好相反-在预览和运行时之间没有区别,因此设计必须无法检测到它。

此外,最好将PreviewProvider转换为DEBUG本身,例如

#if DEBUG
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif

答案 3 :(得分:0)

您无法将“预览模式”与调试模式进行比较。 没有预览模式。

相反,PreviewProvider用于在Xcode中进行开发时为Canvas提供预览内容。您甚至可以配置Canvas预览多个设备,请参见:

https://www.hackingwithswift.com/quick-start/swiftui/how-to-preview-your-layout-in-different-devices

答案 4 :(得分:0)

我正在使用SpriteKit,并且在预览模式下设置preferredFramesPerSecond = 1,以便我的计算机不会产生太多白噪声。

struct MyView: View {
    var isPreview: Bool = false
    var body: some View {
        Text(isPreview ? "Preview" : "Not preview")
    }
}

// Usage
struct MyView_Previews: PreviewProvider {
    static var previews: some View {
        return Group {
            MyView(isPreview: true)
            MyView(isPreview: false)
        }
    }
}