ios - 如何在 Swift 中编写编译时代码?

标签 ios macos swift ios8

我想编写一些编译时代码(即编译项目时运行的代码)。这在其他语言(例如 Java)中用于编写代码生成器(例如 Dagger 2)。

这在 Swift 中可能吗?如果是这样怎么办?这对于我正在尝试做的事情相当重要。

最佳答案

你的问题很模糊。编写编译时代码有多种原因,这完全取决于您想要做什么。

如果您想编写仅基于某些编译时指令运行的条件代码,请使用

#if build configuration
    statements
#else
    statements
#endif

如果您想生成像预处理器在宏中所做的那样的代码以减少代码重复,那么您应该简单地改变您的思维方式并使用 swift 函数和泛型,它们将实现相同的结果,甚至更好。 (像 #define xxx ... 这样的简单宏被 let xxx = ... 替换)。

最后,如果您想生成大量代码,那么 Swift 不适合您,您应该使用专用的代码生成器或某种脚本语言。例如,如果您希望为状态机生成代码,请使用用于该任务的专用工具并将 UML 作为输入。显然,今天您将很难找到输出 Swift 代码的工具(至少 Swift 本身是一个移动目标),但这会随着时间的推移而改变。

关于ios - 如何在 Swift 中编写编译时代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25468874/

相关文章:

ios - 将数据传递到两个选项卡栏 View Controller

ios - 错误 :Use of undeclared type 'NSObject' in Xcode

swift - sqlite3_open 在 swift Playground 而不是 swift 应用程序中工作

javascript - iOS Safari 的 iframe 无法获取设备方向和运动事件

ios - Z方向UIView旋转?

objective-c - 如何播放音频先完成音频文件然后再开始播放?

ios - UIButton 边框在被选中时改变粗细

macos - 如何编译导出符号的 Haskell Mach-O 可执行文件?

具有不区分大小写文件系统的 MacOS 上的 MySQL 区分大小写表名称

mysql - 在 Mac 上安装后使用 ALTER USER 语句重置 MySQL 根密码