Swift – 使用编译变量?

Swift – 使用编译变量?,第1张

概述在Objective C中,我在构建设置中设置了一堆编译器标志 – >代码中使用的其他C标志.例如: 标志=> -DPortNumber = 1 在代码中我能够通过@PortNumber访问它 这在Swift中不起作用,我无法找到答案. 任何想法? C编译器的-D标志定义了预处理器宏. Swift中没有预处理器宏.所以如果你想做一些像: // compile with -DPORT_NUMBER 在Objective C中,我在构建设置中设置了一堆编译器标志 – >代码中使用的其他C标志.例如:

标志=> -DPortNumber = 1

在代码中我能够通过@PortNumber访问它

这在Swift中不起作用,我无法找到答案.
任何想法?

解决方法 C编译器的-D标志定义了预处理器宏. Swift中没有预处理器宏.所以如果你想做一些像:

// compile with -DPORT_NUMBER 31337var port = PORT_NUMBER    // error

……你做不到. Swift旨在使源代码在编译之前在语法上完整.如果你可以在构建时切换掉它的块,你就会破坏工具链的功能,以帮助验证你的代码是否正确. (部分原因是因为C中的预处理器宏是文本替换的:您可以使用它们来重写语言的任何部分,而不仅仅是填充变量的值.)

Swift编译器确实有一个-D标志,但它的使用受到更多限制:你只能使用它为build configurations.所以,如果你想做类似下面的事情,你会很酷:

// compile with -DUSE_STAGING_SERVER#if USE_STAGING_SERVERvar port = 31337#elsevar port = 80#endif

请注意,与C不同,#if块中的所有内容都需要在语法上完整. (例如,你不能只将func的声明行放在#if块中,并将函数体留在条件之外.)

当然,如果您希望在代码中使用在编译时设置的配置值,这对您没有帮助.为此,我建议采用其他方法. Xcode仍然可以在资源文件中进行文本替换,例如属性列表. (请注意,您的应用程序附带的Info.pList充满了类似$(TARGET_name)的内容.)因此,您可以在应用程序中包含一个bundle资源,其内容在编译时根据您的项目设置填充,然后从那里读取你的端口号.

总结

以上是内存溢出为你收集整理的Swift – 使用编译变量?全部内容,希望文章能够帮你解决Swift – 使用编译变量?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1016494.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存