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    
    }
  • 相关阅读:
    uva 10127
    POJ 3280 Cheapest Palindrome
    看图学英语
    看图学英语
    算法 Tricks(四)—— 获取一个数二进制形式第一个不为 0 的位置
    算法 Tricks(四)—— 获取一个数二进制形式第一个不为 0 的位置
    Opencv Surf算子中keyPoints,描述子Mat矩阵,配对向量DMatch里都包含了哪些好玩的东东?
    强大的 function adapters
    强大的 function adapters
    transform、accumulate —— C++ 下的 MapReduce
  • 原文地址:https://www.cnblogs.com/yajunLi/p/5868142.html
Copyright © 2011-2022 走看看