iOS app版本比较

compare() 方法可以直接对版本进行比较

这个是错误的!!!

这是之前在网上搜到的使用方法以为是正确的,突然发现10.0与9.0比较得到的结果是错误的,仔细研究了一下,发现compare的比较方式是按位比较, 所以10.0与9.0的比较其实得到的结果是 1<9!!!

感谢评论区 @saberyy 同学

compare方法入参中的options可以传String.CompareOptions.numeric 表示按照数字字符串进行比较 ,比较原理不清楚,但是测试了以下几种代码,确实完美解决,各种长度的版本号都没问题

"9.1".compare("10.1.1.02", options: String.CompareOptions.numeric, range: nil, locale: nil)

"9.0.1".compare("10.1.1.02", options: String.CompareOptions.numeric, range: nil, locale: nil)

"10.1.1.03".compare("10.1.1.02", options: String.CompareOptions.numeric, range: nil, locale: nil)

"10.1.1.02".compare("10.1.1.02", options: String.CompareOptions.numeric, range: nil, locale: nil)

以下忽略

查找了一些其他方案,没有什么完美的解决方案,只能自己封装一个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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,265评论 0 4
  • 更多内容:演员自我修养(合集) 一分钟时间,如何在第一个夜晚狼队安排出基本战术,进行分工? Pandakill、s...
    merlin是一种态度阅读 3,030评论 10 11
  • 1.赋值运算 2.条件语句 3.假如输入的位置是ADC 打印后裔、黄忠、虞姬 假如输入的位置是肉盾打印亚瑟、陈咬金...
    门三就是闫阅读 13,005评论 11 21
  • 天地孕万物,万物有阴阳,相生亦相克,共存于天地。
    fzrc阅读 165评论 0 2
  • 真是…… 诶…… 好吧~_~我自认为这个题目比较对劲儿,多少次,都在想今天写个这到底是为了啥⊙∀⊙? 但是多想一下...
    杨阳阳6阅读 152评论 0 1