
-DC编译器的标志定义了预处理器宏。Swift中没有预处理器宏。因此,如果您要执行以下 *** 作:
// compile with -DPORT_NUMBER 31337var port = PORT_NUMBER // error
…你不能。Swift旨在使源代码在编译之前在语法上完整。如果您可以在构建时关闭其中的某些块,则可能会破坏工具链的功能,以帮助验证代码是否正确。(部分原因是因为C中的预处理器宏是文本替换的:您可以使用它们来重写语言的任何部分,而不仅仅是填写变量的值。)
Swift编译器确实有一个
-D标志,但是其使用受到更多限制:您只能将其用于构建配置。因此,如果您想执行以下 *** 作,那将很酷:
// compile with -DUSE_STAGING_SERVER#if USE_STAGING_SERVERvar port = 31337#elsevar port = 80#endif
请注意,与C不同,
#if块内的所有内容都必须在语法上完整。(例如,您不能仅将a的声明行
func放在
#if块中,而将函数主体保留在条件语句之外。)
当然,如果要在代码中使用编译时设置的配置 值
,这对您没有帮助。为此,我建议使用其他方法。Xpre仍然可以在资源文件(例如属性列表)中进行文本替换。(请注意,应用程序随附的Info.plist充满了诸如之类的东西
$(TARGET_NAME)。)因此,您可以在应用程序中包含捆绑资源,其内容将根据项目设置在编译时填充,然后读取端口从那开始
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)