在SWIFT之前,我会定义一套用于alpha、beta和发行版构建的方案.这些方案中的每一个都有一组宏,这些宏被定义为在项目级别控制某些行为.最简单的示例是DEBUG=1宏,它是默认为运行构建的默认方案中的所有Xcode项目定义的.用户可以查询#ifdef debug.并相应地在代码中做出决定,甚至编译出不必要的代码.

这种类型的配置选通似乎不像使用SWIFT那么容易,因为不支持宏.有人能建议一种类似的方法吗,我不在乎代码本身是不是编译出来的.不过,我想根据构建方案 Select 功能.

推荐答案

在SWIFT中,您仍然可以使用"#if/#Else/#endif"预处理器宏(尽管有更多约束),如Apple docs所示.下面是一个示例:

#if DEBUG
    let a = 2
#else
    let a = 3
#endif

不过,现在您必须在其他地方设置"DEBUG"符号.在"SWIFT编译器-自定义标志"部分的"其他SWIFT标志"行中设置它.您可以使用-D DEBUG条目添加调试符号.

(Build Settings -> Swift Compiler - Custom Flags) enter image description here

通常,您可以在"调试"或"发布"中设置不同的值.

我用真实的代码测试了它;在操场上似乎认不出来.

Ios相关问答推荐

如何在iPhone 15上消除.NET Maui中状态栏和页面之间的差距

如何修复使用EFCore和SQLite的.Net MAUI iOS应用程序上的当前应用程序不支持NullabilityInfoContext?

如果没有等待,SWIFT Async让任务抛出取消异常

Swift-如何通过Case Let访问模型变量

发生错误.请稍后重试.在 App Store 连接中

Swift:判断 Foundation (NS)Errors 与自定义协议的一致性

为什么这个 init 被分派到一个内部扩展 init?

如何在 SwiftUI 中同时使用 LongPressGesture 和 ScrollView 中的滚动?

在 SwiftUI 中放置全局 NavigationPath 的位置

iOS 16 堆栈视图中按钮的奇怪动画

具有多个目标的应用程序的动态内容

在所有 tableview / collectionview 中禁用滚动指示器

带有属性包装器的不可用属性

Xcode intellisense 彩色框中字母的含义,如 f、T、C、M、P、C、K、# 等

如何忽略touch 事件并将它们传递给另一个子视图的 UIControl 对象?

'+entityForName: nil 不是合法的 NSManagedObjectContext 参数 - 核心数据

无法验证客户端 3000

iOS 10 / Xcode 8 设备上的 NSLog 似乎被截断了?为什么?

没有 Mac 的 Xamarin Visual Studio IOS 开发?

UITableView:从空白部分隐藏标题