What is the Swift preprocessor equivalent to iOS version check comparison? What is the Swift preprocessor equivalent to iOS version check comparison? swift swift

What is the Swift preprocessor equivalent to iOS version check comparison?


The other answers fail to mention proper ways of checking the system version. You should absolutely never utilize: Device.systemVersionYou shouldn't make custom macros to check version numbers, and you shouldn't dig beyond the libraries that Apple has specifically defined for this task.

There's a great article detailing this out here.

Note that Swift 2.0 allows you to directly check if an OS version number is available via:

if #available(iOS 10.0, *) {    // modern code} else {    // Fallback on earlier versions}

Prior to Swift 2.0, the recommended approach was via the system macros provided:

    if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_9_0) {    // do stuff for iOS 9 and newer} else {    // do stuff for older versions than iOS 9}

or via:

    if NSProcessInfo().isOperatingSystemAtLeastVersion(NSOperatingSystemVersion(majorVersion: 10, minorVersion: 0, patchVersion: 0)) {    // modern code}

For anything missing beyond the system macros.

Any other approach has been downplayed as unreliable and not recommended by Apple. There's actually an approach that will break in iOS 10.

Note that if you need macro like functionality in a check and you'd like to use #available you can use @available defined in this article as such:

 @available(iOS 7, *)func iOS7Work() {    // do stuff    if #available(iOS 8, *) {        iOS8Work()    }}@available(iOS 8, *)func iOS8Work() {    // do stuff    if #available(iOS 9, *) {        iOS9Work()    }}@available(iOS 9, *)func iOS9Work() {    // do stuff}

For further information on attributes in Swift, you can reference Apple's documentation.


In Constants.swift:

Swift 1:

let Device = UIDevice.currentDevice()private let iosVersion = NSString(string: Device.systemVersion).doubleValue

Swift 2:

let Device = UIDevice.currentDevice()private let iosVersion = Double(Device.systemVersion) ?? 0 let iOS8 = iosVersion >= 8let iOS7 = iosVersion >= 7 && iosVersion < 8

Then in other files

if iOS8{}else{}


var systemVersion = UIDevice.currentDevice().systemVersion