在Objective-C中,我在“构建设置 -> 其他C标志”中设置了一堆编译器标志,这些标志在代码中被使用。例如:
标志 => -DPortNumber = 1
在代码中,我可以通过@(PortNumber)
来访问它。
在Swift中,这种方法行不通,我找不到答案。
在Objective-C中,我在“构建设置 -> 其他C标志”中设置了一堆编译器标志,这些标志在代码中被使用。例如:
标志 => -DPortNumber = 1
在代码中,我可以通过@(PortNumber)
来访问它。
在Swift中,这种方法行不通,我找不到答案。
-D
标志定义了一个预处理宏。在Swift中没有预处理宏。所以如果你想做类似这样的事情:// compile with -DPORT_NUMBER 31337
var port = PORT_NUMBER // error
// compile with -DUSE_STAGING_SERVER
#if USE_STAGING_SERVER
var port = 31337
#else
var port = 80
#endif
#if
块中的所有内容都需要在语法上完整。例如,你不能只在#if
块中放置func
的声明行,然后将函数体放在条件之外。$(TARGET_NAME)
这样的内容。)因此,你可以在应用程序中包含一个bundle资源,其内容根据编译时的项目设置进行填充,然后从中读取端口号。
someKey = $(MY_VALUE)
的内容(当然,这是在 XML 中),构建系统将会填充 MY_VALUE。(看一下模板项目附带的 Info.plist 文件,像 bundle 名称之类的东西就是这样定义的。)然后,从 plist 文件中加载值的 Swift 代码将会获取到构建系统定义的值。 - rickster