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