在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添加自定义键。这并不总是一个可接受的解决方案,但对于配置值,这是有效的。
答案 0 :(得分:1)
宏是邪恶的。他们被滥用于这样的事情,这不是一个干净的解决方案。您有以下选项(其中一些已经被您提及)。
最简单,易于阅读和编辑。不适合大型配置。
.plist
。 易于阅读和编辑(甚至在构建之前从命令行工具开始,请参阅PlistBuddy
工具)。更适合更大的配置。
您的代码可以包含一个可以轻松匹配的表达式,例如
let myConfigValue = "${MY-CONFIG-VALUE}".
您可以使用命令行工具轻松替换这些值,例如sed
。这基本上复制宏而不使用C预处理器。如果您已经拥有一个不想更改的构建系统,那么这不是很干净但可用。
您可以拥有一个包含配置常量的Swift文件,并使用#if
在它们之间切换。
答案 1 :(得分:0)
定义这样的条件:
var window: UIWindow?
#if MYDEF
var textureRenderThread : TextureRenderThread?
#endif
在项目 - >构建设置 - > Swift编译器 - >自定义标志
将“-D MYDEF”设置为“Other Swift Flags”的值