Swift条件编译

作者: 小新

发布于 2023-01-10 | 最后更新 2023-01-10


Swift中没有宏定义的概念,因此我们不能使用#ifdef的方法来检查某个符号是否经过宏定义。 但是为了控制编译流程和内容,Swift还是为我们提供了几种简单的机制来根据需求定制编译内容的。

#if <condition>
#elseif <condition>
#else
#endif

一、 Flag

#if DEBUG let name = “name”

print(“实际内存大小”, MemoryLayout.size(ofValue: name))

print(“内存对齐大小”, MemoryLayout.alignment(ofValue: name))

print(“分配的内存大小”, MemoryLayout.stride(ofValue: name))

#endif 可以在 Build settings → swift compiler - custom flags 中设置Flag(eg: MYDEBUG)

二、System

#if os(macOS) || os(tvOS) || os(iOS) || os(watchOS) …

#endif

三、是否能import

#if canImport(SnapKit) …

#endif

四、芯片架构

#if arch(x86_64) || arch(arm) || arch(arm64) || arch(i386) …

#endif

五、Swift编译版本/版本

暂不清楚 compiler() 与 swift() 的区别

#if compiler(>=5.4.2) || compiler(<1.0) …

endif #if swift(>=5.4) …

#endif

六、目标环境

目前应该只有模拟器simulator一个值

#if targetEnvironment(simulator) …

#endif