是否可以检查SwiftUI应用是否处于预览模式?例如,您可以使用#if DEBUG
检查您的应用程序是处于开发模式还是生产模式。您可以执行类似的操作来检查是否正在预览吗?
答案 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)
}
}
}