在C/C++/Objective C中,可以使用编译器预处理器定义宏。此外,您可以使用编译器预处理器包含/排除代码的某些部分。
#ifdef DEBUG
// Debug-only code
#endif
Swift中有类似的解决方案吗?
在C/C++/Objective C中,可以使用编译器预处理器定义宏。此外,您可以使用编译器预处理器包含/排除代码的某些部分。
#ifdef DEBUG
// Debug-only code
#endif
Swift中有类似的解决方案吗?
当前回答
莫伊尼昂的回答很好。这是另一条信息,以防有帮助,
#if DEBUG
let a = 2
#else
let a = 3
#endif
您可以像下面这样否定宏,
#if !RELEASE
let a = 2
#else
let a = 3
#endif
其他回答
![在Xcode 8及以上版本中,转到构建设置->搜索自定义标志]1
在代码中
#if Live
print("Live")
#else
print("debug")
#endif
没有Swift预处理器。(一方面,任意代码替换破坏了类型和内存安全。)
不过,Swift确实包含了构建时配置选项,因此您可以有条件地包含某些平台或构建样式的代码,或者响应您使用-D编译器参数定义的标志。但是,与C不同,代码的有条件编译部分必须在语法上完整。在将Swift与Cocoa和Objective-C结合使用中有一节介绍了这一点。
例如:
#if os(iOS)
let color = UIColor.redColor()
#else
let color = NSColor.redColor()
#endif
Xcode 8对ifdef替换进行了重大更改。即使用主动编译条件。
请参阅Xcode 8发行说明中的构建和链接。
新建生成设置
新设置:SWIFT_ACTIVE_COMPILATION_CONDITIONS
“Active Compilation Conditions” is a new build setting for passing conditional compilation flags to the Swift compiler.
以前,我们必须在OTHER_SWIFT_flags下声明条件编译标志,记住在设置前加上“-D”。例如,要有条件地使用MYFLAG值进行编译:
#if MYFLAG1
// stuff 1
#elseif MYFLAG2
// stuff 2
#else
// stuff 3
#endif
要添加到设置的值-DMYFLAG
现在我们只需要将值MYFLAG传递到新设置。是时候移动所有这些条件编译值了!
有关Xcode 8中更多Swift Build Settings功能,请参阅以下链接:http://www.miqu.me/blog/2016/07/31/xcode-8-new-build-settings-and-analyzer-improvements/
在使用Xcode版本9.4.1创建的Swift项目中,Swift 4.1
#if DEBUG
#endif
默认情况下工作,因为在预处理器宏中,Xcode已设置DEBUG=1。
因此,您可以使用#if DEBUG“开箱即用”。
顺便说一句,苹果的《Swift编程语言4.1》一书(编译器控制语句一节)中写了如何使用条件编译块,而如何编写编译标志以及Swift中C宏的对应内容,则在另一本苹果的《将Swift与Cocoa和Objective C结合使用》一书中(预处理器指令一节)
希望未来苹果会为他们的书写更详细的内容和索引。
莫伊尼昂的回答很好。这是另一条信息,以防有帮助,
#if DEBUG
let a = 2
#else
let a = 3
#endif
您可以像下面这样否定宏,
#if !RELEASE
let a = 2
#else
let a = 3
#endif