Swift宏

2022-06-30  本文已影响0人  大刘

Swift中没有宏,但可以用其他方式实现类似于宏的功能。
示例:

#define M_PI 3.14

let M_PI = 3.14

#define NSLocalizedString(key, comment) \
[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]

func NSLocalizedString(key: String, value: String, table: String) -> String {
    return Bundle.main.localizedString(forKey: key, value: value, table: table)
}

Swift中也没有了条件编绎

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

不过,Swift 内建了几种平台和架构的组合,来帮助我们为不同的平台编译不同的代码,具体地:

方法 可选参数
os() OSX, iOS
arch() x86_64, arm, arm64, i386

os即操作系统,OSX即MAC操作系统,iOS即手机, iPad..操作系统
arch指CPU架构,arm 和 arm64 两项分别对应真机 32 位 CPU 和 64 位 CPU, i386 和 x86_64两项分别对应32位模拟和64位模拟器(模拟器当然使用的是电脑x86系列CPU)

如果我们统一我们在 iOS 平台和 Mac 平台的关于颜色的 API 的话,一种可能的方法就是配合 typealias 进行条件编译:

#if os(OSX)
    typealias Color = NSColor
#else
    typealias Color = UIColor
#endif

参考:

上一篇 下一篇

猜你喜欢

热点阅读