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 }