How to check the system version in swift

NSProcessInfo

预料到开发者对检查系统版本同时又对Swift友好的API的需求,iOS 8在NSProcessInfo中引入了operatingSystemVersion属性和 isOperatingSystemAtLeastVersion方法。两个API都使用了新的NSOperatingSystemVersion数值类 型,它包括majorVersion、minorVersion和patchVersion。

Tips:苹果软件发布的版本号遵循语义化版本约定。

isOperatingSystemAtLeastVersion

对一个简单的检查,比如“这个app能在iOS 8运行吗?” isOperatingSystemAtLeastVersion是最简单明了的方式。

1 if NSProcessInfo().isOperatingSystemAtLeastVersion(NSOperatingSystemVersion(majorVersion: 8, minorVersion: 0, patchVersion: 0)) {
2 print("iOS >= 8.0.0")
3 }

operatingSystemVersion

为了更复杂的版本比较,operatingSystemVersion能够被直接检查。将它和Swift模式比较和switch语句组合,可以使得代码更简洁。

 1 let os = NSProcessInfo().operatingSystemVersion
 2 switch (os.majorVersion, os.minorVersion, os.patchVersion) {
 3 case (8, _, _):
 4     print("iOS >= 8.0.0")
 5 case (7, 0, _):
 6     print("iOS >= 7.0.0, < 7.1.0")
 7 case (7, _, _):
 8     print("iOS >= 7.1.0, < 8.0.0")
 9 default:
10     print("iOS < 7.0.0")
11 }

UIDevice systemVersion

可惜的是,新NSProcessInfo API目前并不是特别有用,因为它们在iOS 7上不生效。

作为替代,可以使用systemVersion属性UIDevice来进行检查:

1 if UIDevice.currentDevice().systemVersion == "8.0.0"{
2    print("ios = 8.0.0")
3 }

NSAppKitVersionNumber

另一个确定API可用性的方法是检查框架的版本号。不幸的是,Foundation的NSFoundationVersionNumber和Core Foundation的kCFCoreFoundationVersionNumber很早之前就过时了,但过去几个版本的OS发布并没有更新这两个常量。

这对于iOS来说是无解的,但OS X还可以通过NSAppKitVersionNumber检查AppKit的版本号:

1 if rint(NSAppKitVersionNumber) > NSAppKitVersionNumber10_9 {
2     print("OS X >= 10.10")
3 }

Tips:苹果在示例代码中使用rint来完成NSAppKitVersionNumber的版本号比较。

将以上的总结一下,在Swift中检查系统版本总共有以下方法。

  • 使用#if os(iOS)预编译指令来区别iOS(UIKit)和OS X(AppKit)目标。
  • 当最低目标适配为iOS 8以上时,使用NSProcessInfo operatingSystemVersion 或isOperatingSystemAtLeastVersion。
  • 如需适配iOS 7或以下的设备,使用UIDevice systemVersion上的compare和 NSStringCompareOptions.NumericSearch。
  • 如果是为OS X开发,使用NSAppKitVersionNumber比较生效的AppKit常量。

你可能感兴趣的:(How to check the system version in swift)