iOS 版本號的比較

晨煜煌發表於2018-05-24

compare() 方法可以直接對版本進行比較
這個是錯誤的!!!

這是之前在網上搜到的使用方法以為是正確的,突然發現10.0與9.0比較得到的結果是錯誤的,仔細研究了一下,發現compare的比較方式是按位比較, 所以10.0與9.0的比較其實得到的結果是 1<9!!!

查詢了一些其他方案,沒有什麼完美的解決方案,只能自己封裝一個String的extension方法,思路很簡單,以“.”分隔,得到陣列,然後按每一個下標比較


public func versionCompare(_compareVersion:String) -> ComparisonResult {

        //將兩個版本號以“.”拆分成陣列

        let currentVersions = self.base.components(separatedBy:".")

        let compareVersions = compareVersion.components(separatedBy:".")

        //分別比較每一位的大小

        let count = (currentVersions.count< compareVersions.count) ? currentVersions.count: compareVersions.count

        for i in 0..<count

            if let current =Int(currentVersions[i]), let compare = Int(compareVersions[i]) {

                if current > compare {

                    return ComparisonResult.orderedDescending

                }else if current < compare {

                    return ComparisonResult.orderedAscending

                }

            }

        }

        //經過上面的for後還沒有比較出來,說明兩者相同位的版本號都相同,剩下的則看誰的版本號更長,長的則表示版本號大。例:11.0.1 < 11.0.1.1

        if currentVersions.count< compareVersions.count{

            return ComparisonResult.orderedAscending

        }else if currentVersions.count> compareVersions.count{

            return ComparisonResult.orderedDescending

        }else{

            return ComparisonResult.orderedSame

        }

    }

複製程式碼

ComparisonResult.orderedDescending 表示降序,即currentVersion > compareVersion

ComparisonResult.orderedAscending 表示升序,即currentVersion < compareVersion

ComparisonResult.orderedSame 表示相等,即currentVersion = compareVersion

相關文章