zoukankan      html  css  js  c++  java
  • Swift3 获取版本号,比较版本大小

    Swift获取应用版本号:version 

    1、获取本地版本号

    /// 获取本地版本号
    func getLocalVersion() -> String {
        var localVersion:String = ""
        //当前版本
        if let v:String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String{
            localVersion = v
        }
    
        return localVersion
    }

    如果想获取build号:替换key 为“CFBundleVersion”即可。

    2、比较两个版本大小:

    这里有个误区,可能有些人觉得直接比较就可以了,其实这样是错误的,比如:

    v1.1.10 和 v1.1.2  ,直接比较后者>前者,但实际上【1.1.2 < 1.1.10】。

    所以下面的比较原理,其实是分割比较:

    参考代码:

    /// 比较版本大小,返回是否需要更新
    ///
    /// - Parameters:
    ///   - v1: 版本1- 新版本
    ///   - v2: 版本2- 当前版本
    /// - Returns: true:v1>v2    false:v1<=v2
    func compareVersions(v1:String,v2:String) -> Bool {
        if v1.isEmpty && v2.isEmpty || v1.isEmpty{
            return false
        }
        
        if v2.isEmpty {
            return true
        }
        
        let arry1 = v1.components(separatedBy: ".")
        let arry2 = v2.components(separatedBy: ".")
        //取count少的
        let minCount = arry1.count > arry2.count ? arry2.count : arry1.count
        
        var value1:Int = 0
        var value2:Int = 0
        
        for i in 0..<minCount {
            if !isPurnInt(string: arry1[i]) || !isPurnInt(string: arry2[i]){
                return false
            }
           
            value1 = Int(arry1[i])!
            value2 = Int(arry2[i])!
          
            // v1版本字段大于v2版本字段
            if value1 > value2 {
               // v1版本字段大于v2版本字段
               return true
            }else if value1 < value2{
               // v1版本字段小于v2版本字段
               return false
            }
            // v1版本=v2版本字段  继续循环
            
        }
        
        //字段多的版本高于字段少的版本
        if arry1.count > arry2.count {
            return true
        }else if arry1.count <= arry2.count {
            return false
        }
        
        return false
    }
    
    /// 判断是否是数字
    ///
    /// - Parameter string: <#string description#>
    /// - Returns: <#return value description#>
    func isPurnInt(string: String) -> Bool {    
        let scan: Scanner = Scanner(string: string)    
        var val:Int = 0    
        return scan.scanInt(&val) && scan.isAtEnd    
    }
  • 相关阅读:
    JavaScript中的闭包
    SQL 备忘
    SqlServer 2005 升级至SP2过程中出现"身份验证"无法通过的问题
    unable to start debugging on the web server iis does not list an application that matches the launched url
    Freebsd 编译内核
    Freebsd 6.2中关于无线网络的设定
    【Oracle】ORA01219
    【Linux】Windows到Linux的文件复制
    【Web】jar命令行生成jar包
    【Linux】CIFS挂载Windows共享
  • 原文地址:https://www.cnblogs.com/yajunLi/p/5868142.html
Copyright © 2011-2022 走看看