用于String值替换的Swift编译器宏/标志

时间:2015-06-14 19:18:51

标签: swift

在Objective-C中,我们可以添加-DVAR_NAME=@\"string value\"的C标志,然后使用NSString *var = VAR_NAME获取值。

我们如何在Swift中执行此操作?

这方面的一个例子是基于当前的git分支定义api主机。假设分支是feature1,它应该连接到https://feature1.example.com。 shell脚本可以轻松找到当前分支并添加C标志。然后在Objective-C中,我们可以使用shell脚本中的分支来生成api主机URL。

更新

我不是在询问布尔标志。我需要传递一个字符串值。

更新2

到目前为止,我所能想到的就是使用构建脚本来生成一个快速的类。

更新3

另一个选项是向Info.plist添加自定义键。这并不总是一个可接受的解决方案,但对于配置值,这是有效的。

2 个答案:

答案 0 :(得分:1)

宏是邪恶的。他们被滥用于这样的事情,这不是一个干净的解决方案。您有以下选项(其中一些已经被您提及)。

  1. 的Info.plist
  2. 最简单,易于阅读和编辑。不适合大型配置。

    1. 您自己的.plist
    2. 易于阅读和编辑(甚至在构建之前从命令行工具开始,请参阅PlistBuddy工具)。更适合更大的配置。

      1. 自动生成的代码
      2. 您的代码可以包含一个可以轻松匹配的表达式,例如

        let myConfigValue = "${MY-CONFIG-VALUE}".
        

        您可以使用命令行工具轻松替换这些值,例如sed。这基本上复制宏而不使用C预处理器。如果您已经拥有一个不想更改的构建系统,那么这不是很干净但可用。

        1. 多个代码变体
        2. 您可以拥有一个包含配置常量的Swift文件,并使用#if在它们之间切换。

答案 1 :(得分:0)

定义这样的条件:

var window: UIWindow?

#if MYDEF
  var textureRenderThread : TextureRenderThread?
#endif

在项目 - >构建设置 - > Swift编译器 - >自定义标志

将“-D MYDEF”设置为“Other Swift Flags”的值