我想编写一些编译时代码(即编译项目时运行的代码)。这用于其他语言(例如Java)以编写代码生成器(例如Dagger 2)。
这在Swift中可行吗?如果是这样的话?这对我正在尝试做的事情非常重要。
答案 0 :(得分:2)
你的问题很模糊。编写编译时代码有多种原因,这完全取决于你想要做什么。
如果要编写仅基于某些编译时指令运行的条件代码,请使用
#if build configuration
statements
#else
statements
#endif
如果你想生成像预处理器一样的代码来减少代码重复,那么你应该简单地改变你的思维方式并使用快速的函数和泛型来实现相同的结果,只有更好。 (#define xxx ...
等简单宏替换为let xxx = ...
)。
最后,如果你想生成大量的代码,那么Swift不是你的语言,你应该使用专用的代码生成器或一些脚本语言。例如,如果您正在寻找为状态机生成代码,请使用专用工具作为输入UML的任务。显然,你今天很难找到输出Swift代码的工具(其中最少的是Swift本身就是一个移动的目标),但这会随着时间的推移而发生变化。