gpt4 book ai didi

字符串值替代的 Swift 编译器宏/标志

转载 作者:可可西里 更新时间:2023-11-01 02:21:12 24 4
gpt4 key购买 nike

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

我们如何在 Swift 中做到这一点?

这方面的一个例子是根据当前的 git 分支定义一个 api 主机。假设分支是 feature1,它应该连接到 https://feature1.example.com。一个 shell 脚本可以很容易地找到当前分支并添加 cflags。然后在 Objective-C 中,我们可以使用 shell 脚本中的分支来生成 api 主机 url。

更新

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

更新 2

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

更新 3

另一种选择是将自定义键添加到 Info.plist。这并不总是一个可接受的解决方案,但对于配置值来说这是可行的。

最佳答案

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

  1. Info.plist

最简单,易于阅读和编辑。不适合大型配置。

  1. 您自己的 .plist

易于阅读和编辑(甚至在构建之前使用命令行工具,请参阅 PlistBuddy 工具)。更适合更大的配置。

  1. 自动生成代码

您的代码可以包含一个可以轻松匹配的表达式,例如

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

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

  1. 多种代码变体

您可以拥有一个带有配置常量的 Swift 文件,并使用 #if 在它们之间切换。

关于字符串值替代的 Swift 编译器宏/标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30833506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com