swift - SwiftUI 中的预览真的需要#if DEBUG 语句才能在发布版本中将其删除吗?

标签 swift c-preprocessor swiftui

预处理器宏在 SwiftUI 官方教程/视频中很常见,例如:

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

需要那些吗?编译器肯定可以看到struct不在内部使用并省略整个 struct因为访问修饰符是隐式的 internal对?我认为一切符合PreviewProvider可以删除,但也许不是每个符合条件的对象都这样,但如果不使用它,为什么 Apple 决定包含预处理器宏?

我试图在 Release模式下运行它并在派生数据文件夹中找到已编译的类,但我对此一无所知(.o 文件)。 任何人都可以确认我们是否真的需要在发布版本中包含宏以省略未使用的代码(ContentView_Previews 类型不会在代码中的任何地方使用,期待预览,但无论如何都不会在发布版本中使用)?

最佳答案

NOTE: To be extra clear, you DO NOT need to wrap your preview providers in #if DEBUG conditionals. They are removed from your production build.



我有点晚了,但我只需要记下这一点,因为网络上到处都是困惑,结果证明它很可笑。发行说明位于“ 已解决的问题”下,已解决问题的标题是“存档时未从构建的产品中正确删除PreviewProviders。(51539802)”。

是的,现在一切都说得通了。

The still
The proof

Annnd Just in case you think they may have changed it later..... more proof

(我很彻底......也许太多了)

关于swift - SwiftUI 中的预览真的需要#if DEBUG 语句才能在发布版本中将其删除吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56485562/

相关文章:

iOS 自定义 UIView 在 iphone xr 和 iphone 7 中具有不同的布局

swift - 单元格滑动时停止计时器,但取消单元格滑动时重新启动

c++ - 宏操作符列表

c - 在 C 中使用 const struct 而不是定义分组配置参数有效吗?

SwiftUI Mac OS DatePicker 在编辑时跳回当天

ios - 如何使水平 StackView 具有第一个元素的宽度并填充其余元素

swift - 从 collectionView 到 Detail

C++ 断言 : the precedence of the expression in an assert macro

SwiftUI Picker Segmented Style Image 显示不良

swift - 错误: Initializer 'init(_:)' requires that 'Binding<String>' conform to 'StringProtocol'