iOS 優雅的比較版本號

Base Swift 3.1,Xcode 8.3.2

很多人選擇用分割數組、按個比較的方式來做,這樣是可以實現這個功能的,但是不那么優雅,iOS SDK 已經提供了必要的方法,就沒有必要重復造輪子了。

下面利用 String 提供的 compare 方法,擴展了一下 String

extension String
{
    func ck_compare(with version: String) -> ComparisonResult {
        return compare(version, options: .numeric, range: nil, locale: nil)
    }
    
    func isNewer(than aVersionString: String) -> Bool {
        return ck_compare(with: aVersionString) == .orderedDescending
    }
    
    func isOlder(than aVersionString: String) -> Bool {
        return ck_compare(with: aVersionString) == .orderedAscending
    }
    
    func isSame(to aVersionString: String) -> Bool {
        return ck_compare(with: aVersionString) == .orderedSame
    }
}

首先提供了一個 “萬能方法”,用來獲取兩個字符串按照數字的方式比較的結果。第二個參數 options 這里提供的值是 .numeric,這個枚舉值可以使字符串的比較依據變成數字,但不是單純的按字符比較,而是將連續的數字當作一個自然語言中的數字,比如10.3.1,第一個數字是10。

然后針對不同的場景,提供了三個便捷方法,可以快速的調用。

PS: Objective-C 亦有同樣的 API,如有需要可以自己封裝。

進一步的,我們可以封裝一些針對 iOS 系統版本的 API

import UIKit

/// 用于判斷當前系統版本是否低于指定版本
func systemVersion(below aVersionString: String) -> Bool
{
    return UIDevice.current.systemVersion.isOlder(than: aVersionString)
}

/// 用于判斷當前系統版本是否高于指定版本
func systemVersion(over aVersionString: String) -> Bool
{
    return UIDevice.current.systemVersion.isNewer(than: aVersionString)
}

/// 用于判斷當前系統版本是否等于指定版本
func systemVersion(sameAs aVersionString: String) -> Bool
{
    return UIDevice.current.systemVersion.isSame(as: aVersionString)
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,257評論 4 61
  • 一直到剛才,才認真的聽完昨晚的課程,聽到中間聲音有嘶啞的那十幾秒時,我真心想謝謝蔡總,感謝她的堅持和精神...
    happyMia閱讀 184評論 0 0
  • 漫夜長長,睡不著。內心有很多的靈感與想法,想要馬上付諸一切的去做。心中也有更多想寫的感受,卻無從下手。 我想...
    空空dj閱讀 231評論 0 0
  • 參加第20周入職培訓的同事們: 大家好! 今天是入職培訓的第二天,從今天開始我們開始講述GCP的內容。 簡單回顧今...
    SMO質保及培訓部閱讀 490評論 0 0
  • 有人/網絡的地方就有是非。無論你愿不愿意這個事情都會發生,都會不知不覺的網住你的,因為人首先是一個社會動物。總有人...
    薄帷鑒明月閱讀 442評論 0 1