iOS 市场版本号与当前版本号比较,提示更新

2020-04-09  本文已影响0人  Smalla
项目需求:
思路
实现

1、获取本地版本号:

// 获取本地版本号:
let localVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? ""

// 因为key值较长,这里我抽成一个方法:let localVersion = BasicTool.getAppVersion()
public struct BasicTool { 
    //获取app版本号
    public static func getAppVersion() -> String{
        return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? ""
    }
}

2、具体比较逻辑,直接贴代码:

// 版本管理类
class VersionManager {
    
    // 返回版本比较结果,如果"localVersion >= appStoreVersion",则返回false,不更新;如果"localVersion < appStoreVersion",则返回true,提示更新。
    class func versionCompare(_ appStoreVersion: String) -> Bool {
        
        let localVersion = BasicTool.getAppVersion()
        
        //判断合法性
        if checkSeparat(localVersion) == "" || checkSeparat(appStoreVersion) == "" {
            return false
        }
        //获得两个数组
        let localVersionArr = cutUpNumber(localVersion)
        let appStoreVersionArr = cutUpNumber(appStoreVersion)
        //比较版本号
        return compareNumber(with: localVersionArr, appStoreVersionArr: appStoreVersionArr)
    }
    
    //提取连接符
    class func checkSeparat(_ vString:String) -> String {
        var separated:String = ""
        if vString.contains("."){ separated = "." }
        if vString.contains("-"){ separated = "-" }
        if vString.contains("/"){ separated = "/" }
        if vString.contains("*"){ separated = "*" }
        if vString.contains("_"){ separated = "_" }
        
        return separated
    }
    
    //提取版本号
    class func cutUpNumber(_ vString:String) -> Array<String> {
        let separat = checkSeparat(vString)
        let b = NSCharacterSet(charactersIn:separat) as CharacterSet
        let vStringArr = vString.components(separatedBy: b)
        return vStringArr
    }
    
    //比较版本
    class func compareNumber(with localVersionArr: [String], appStoreVersionArr: [String]) -> Bool {
        
        for i in 0..<localVersionArr.count {
            
            if appStoreVersionArr.count <= i {
                return false
            }
            if localVersionArr[i].integerValue != appStoreVersionArr[i].integerValue {
                if localVersionArr[i].integerValue > appStoreVersionArr[i].integerValue {
                    return false
                }else{
                    return true
                }
            }
        }
        return false
    }
}

3、场景调用:

// 开启更新之后,市场版本号与本地号比较大小,市场版本号>本地版本号,则提示更新;市场版本号<=本地版本号,则不提示;
// 其中model.dictItemCode为接收到后端接口返回的市场最新版本号
if VersionManager.versionCompare(model.dictItemCode) {
    // 更新逻辑
}

4、如此,问题解决,谢谢!

上一篇 下一篇

猜你喜欢

热点阅读