iOS判断是否审核中

就话不多说,上代码就好

 //保存商店 app 版本,待用
class func saveStoreAppVersion(version: String) {
    UserDefaults.standard.setValue(version, forKey: APP_ID)
}

//获取商店 app 版本
class func getStoreAppVersion() -> String {
    UserDefaults.standard.value(forKey: APP_ID) as? String ?? ""
}

//获取本地 app 的版本
class func getLocalAppVersion() -> String {
    Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? ""
}

//定义一个静态变量,记录是否正在审核的状态,防止每次调用都计算版本号
private static var REVIEW_FLAG: Bool?

// 判断是否在审核中:将本地版本 和 商店版本号,
// 通过 . 拆分成数字数组,依次比较大小,如果本地版本号大,表示在审核中
class func isReviewing() -> Bool {
    
    //该字段是一个全局变量,记录了是否正在审核的状态,
    //防止每次进入后面的计算版本号的代码,提高方法调用的效率
    if REVIEW_FLAG != nil {
        //print("REVIEW_FLAG: \(REVIEW_FLAG!)") //打日志太多 去掉了
        return REVIEW_FLAG!
    }
    
    //商店版本
    let storeVersion = getStoreAppVersion()
    //如果商店中 App 的版本为空,表示新 app 还没有上架,认为在审核中
    if storeVersion.isEmpty {
        print("商店版本号为空,认为还未上架,审核中,REVIEW_FLAG: true")
        //记录到全局状态
        REVIEW_FLAG = true
        return true
    }
    
    //本地版本
    let localVersion = getLocalAppVersion()
    
    print("storeVersion: \(storeVersion)  ;  lovalVersion: \(localVersion)")
    
    //判断是否相等,相等的话,表示非审核中
    if storeVersion == localVersion {
        print("版本相同,非审核中,REVIEW_FLAG : false")
        //记录到全局状态
        REVIEW_FLAG = false
        return false
    }
    
    //本地与商店版本不相等,需要比较才能确定
    //根据 . 拆分字符串为数组 [Substring],
    //如 "1.0.0" -> ["1", "0", "0"]  ; "1.0.1" -> ["1", "0", "1"]
    var storeArr = storeVersion.split(separator: ".")
    var localArr = localVersion.split(separator: ".")
    
    //拆分后的数组长度,有可能会出现不一致,比如本地版本 "1.0.0"  线上版本 "1.0.0.1"
    let storeCount = storeArr.count
    let localCount = localArr.count
    
    print("storeArrCount: \(storeCount)   appArrCount:\(localCount)")
    
    //处理版本数组长度不同的问题,补齐用的数组,默认用 0 补齐
    let tmpArr = [Substring](repeating: "0", count: abs(storeCount - localCount))
    print("tmpArr: \(tmpArr)")
    //补齐数组长度,防止越界的发生
    if storeCount < localCount {
        //补齐商店拆分后的数组
        storeArr.append(contentsOf: tmpArr)
    }else if localCount < storeCount {
        //补齐本地 app 的数组
        localArr.append(contentsOf: tmpArr)
    }
    
    //打印补齐后的数组
    print("storeArr:\(storeArr)   localArr:\(localArr)")
    
    //依次比较数组中的数字
    var isReviewing = false
    for index in 0 ..< storeArr.count {
        // 转为 Int,如果本地版本号大,表示在审核中
        if Int(localArr[index]) ?? 0 > Int(storeArr[index]) ?? 0 {
            isReviewing = true
            break
        }
    }
    
    //记录到全局状态
    REVIEW_FLAG = isReviewing
    
    print("是否为审核版本 REVIEW_FLAG : \(isReviewing)")
    
    return isReviewing
}

你可能感兴趣的:(iOS判断是否审核中)