swift 比较版本号大小

记录一下swift 版本号比较

例如 2.1.0 高于 1.0.0 和 2.0.0
extension String {
    func versionCompare(_ otherVersion: String) -> ComparisonResult {
        var v1 = versionComponents()
        var v2 = otherVersion.versionComponents()
        let diff = v1.count - v2.count
        
        if diff == 0 {
            return self.compare(otherVersion, options: .numeric)
        }
        
        if diff > 0 {
            v2.append(contentsOf: (0..<diff).map { _ in "0" })
        } else {
            v1.append(contentsOf: (0..<abs(diff)).map { _ in "0" })
        }
        
        return v1.joined().compare(v2.joined())
    }
    
    func versionComponents() -> [String] {
        components(separatedBy: ".")
    }
}

调用

print("0.1.1".versionCompare("0.1") == .orderedDescending) // true

这个方法返回一个 ComparisonResult 对象,它有三个值:

  • orderedAscending:前者小于后者
  • orderedSame:两者相等
  • orderedDescending:前者大于后者

比较逻辑

1、首先把两个版本号按句点( . )拆分成数组
2、对比两个版本号的长度是否一致,如果一致,则利用 compare 函数直接对比
3、如果不一致,则把较短的版本号后面补 0
4、最后再用 compare 函数进行对比

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

推荐阅读更多精彩内容

  • 本文根据《语义化版本 2.0.0》[https://semver.org/lang/zh-CN/]一文稍作修改。 ...
    _昴_阅读 438评论 0 1
  • 最近在整理一个版本管理比较乱的项目,于是找了下版本号管理规范相关文档;以下内容均摘抄自语义化版本 2.0.0,感兴...
    我叫没名字啊阅读 8,267评论 1 1
  • 语义化版本 2.0.0 摘要 版本格式:主版本号.次版本号.修订号,版本号递增规则如下: 主版本号:当你做了不兼容...
    括儿之家阅读 5,323评论 0 1
  • 原文:https://makeoptim.com/training/semver[https://makeopti...
    CatchZeng阅读 645评论 0 1
  • 版本号之间比较大小,本质上是比较字符串之间的关系。这里给定两个版本号,你一定能迅速地区分出大小: 想要让计算机程序...
    waylen阅读 20,719评论 2 9