ary*_*axt 6 compiler-flags swift
在Objective-C中,我在构建设置 - >其他C标志中设置了一堆编译器标志,这些标志正在代码中使用.例如:
Flag => -DPortNumber = 1
在代码中我能够访问它 @(PortNumber)
这在Swift中不起作用,我无法找到答案.
ric*_*ter 13
-DC编译器的标志定义了一个预处理器宏.Swift中没有预处理器宏.所以如果你想做一些像:
// compile with -DPORT_NUMBER 31337
var port = PORT_NUMBER // error
Run Code Online (Sandbox Code Playgroud)
......你做不到.Swift旨在使源代码在编译之前在语法上完整.如果你可以在构建时切换掉它的块,你就会破坏工具链的功能,以帮助验证你的代码是否正确.(部分原因是因为C中的预处理器宏是文本替换的:您可以使用它们来重写语言的任何部分,而不仅仅是填充变量的值.)
Swift编译器确实有一个-D标志,但它的使用更为有限:您只能将它用于构建配置.所以,如果你想做类似下面的事情,你会很酷:
// compile with -DUSE_STAGING_SERVER
#if USE_STAGING_SERVER
var port = 31337
#else
var port = 80
#endif
Run Code Online (Sandbox Code Playgroud)
请注意,与C不同,#if块中的所有内容都需要在语法上完整.(例如,您不能只func在#if块中放置a的声明行,并将函数体留在条件之外.)
当然,如果您希望在代码中使用在编译时设置的配置值,这对您没有帮助.为此,我建议采用其他方法.Xcode仍然可以在资源文件中进行文本替换,例如属性列表.(请注意,您的应用程序附带的Info.plist充满了类似的东西$(TARGET_NAME).)因此,您可以在应用程序中包含一个捆绑资源,其内容在编译时根据您的项目设置填充,然后读取您的端口那个数字.
| 归档时间: |
|
| 查看次数: |
2200 次 |
| 最近记录: |