在C/C++/Objective C中,可以使用编译器预处理器定义宏。此外,您可以使用编译器预处理器包含/排除代码的某些部分。
#ifdef DEBUG
// Debug-only code
#endif
Swift中有类似的解决方案吗?
在C/C++/Objective C中,可以使用编译器预处理器定义宏。此外,您可以使用编译器预处理器包含/排除代码的某些部分。
#ifdef DEBUG
// Debug-only code
#endif
Swift中有类似的解决方案吗?
当前回答
是的,你能做到。
根据Apple文档,在Swift中,您仍然可以使用“#if/#else/#endif”预处理器宏(尽管更受限制)。下面是一个示例:
#if DEBUG
let a = 2
#else
let a = 3
#endif
现在,您必须在其他地方设置“调试”符号。在“Swift编译器-自定义标志”部分的“其他Swift标志”行中设置它。您可以使用-D DEBUG条目添加DEBUG符号。
通常,您可以在“调试”或“发布”中设置不同的值。
我在真实代码中测试了它,它工作了;不过,在操场上似乎认不出它。
你可以在这里阅读我的原始帖子。
重要提示:-DDEBUG=1不起作用。只有-D DEBUG有效。编译器似乎忽略了具有特定值的标志。
其他回答
莫伊尼昂的回答很好。这是另一条信息,以防有帮助,
#if DEBUG
let a = 2
#else
let a = 3
#endif
您可以像下面这样否定宏,
#if !RELEASE
let a = 2
#else
let a = 3
#endif
没有Swift预处理器。(一方面,任意代码替换破坏了类型和内存安全。)
不过,Swift确实包含了构建时配置选项,因此您可以有条件地包含某些平台或构建样式的代码,或者响应您使用-D编译器参数定义的标志。但是,与C不同,代码的有条件编译部分必须在语法上完整。在将Swift与Cocoa和Objective-C结合使用中有一节介绍了这一点。
例如:
#if os(iOS)
let color = UIColor.redColor()
#else
let color = NSColor.redColor()
#endif
是的,你能做到。
根据Apple文档,在Swift中,您仍然可以使用“#if/#else/#endif”预处理器宏(尽管更受限制)。下面是一个示例:
#if DEBUG
let a = 2
#else
let a = 3
#endif
现在,您必须在其他地方设置“调试”符号。在“Swift编译器-自定义标志”部分的“其他Swift标志”行中设置它。您可以使用-D DEBUG条目添加DEBUG符号。
通常,您可以在“调试”或“发布”中设置不同的值。
我在真实代码中测试了它,它工作了;不过,在操场上似乎认不出它。
你可以在这里阅读我的原始帖子。
重要提示:-DDEBUG=1不起作用。只有-D DEBUG有效。编译器似乎忽略了具有特定值的标志。
XCODE 9及以上
#if DEVELOP
//print("Develop")
#elseif PRODUCTION
//print("Production")
#else
//
#endif
我的两分钱用于Xcode 8:
a) 使用-D前缀的自定义标志工作正常,但。。。
b) 更简单的使用:
在Xcode 8中有一个新的部分:“活动编译条件”,已经有两行,用于调试和发布。
只需添加无D的定义。