就話不多說(shuō)窃爷,上代碼就好
//保存商店 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 ?? ""
}
//定義一個(gè)靜態(tài)變量苛聘,記錄是否正在審核的狀態(tài),防止每次調(diào)用都計(jì)算版本號(hào)
private static var REVIEW_FLAG: Bool?
// 判斷是否在審核中:將本地版本 和 商店版本號(hào)秃流,
// 通過(guò) . 拆分成數(shù)字?jǐn)?shù)組赂蕴,依次比較大小,如果本地版本號(hào)大舶胀,表示在審核中
class func isReviewing() -> Bool {
//該字段是一個(gè)全局變量概说,記錄了是否正在審核的狀態(tài),
//防止每次進(jìn)入后面的計(jì)算版本號(hào)的代碼嚣伐,提高方法調(diào)用的效率
if REVIEW_FLAG != nil {
//print("REVIEW_FLAG: \(REVIEW_FLAG!)") //打日志太多 去掉了
return REVIEW_FLAG!
}
//商店版本
let storeVersion = getStoreAppVersion()
//如果商店中 App 的版本為空糖赔,表示新 app 還沒有上架,認(rèn)為在審核中
if storeVersion.isEmpty {
print("商店版本號(hào)為空轩端,認(rèn)為還未上架放典,審核中,REVIEW_FLAG: true")
//記錄到全局狀態(tài)
REVIEW_FLAG = true
return true
}
//本地版本
let localVersion = getLocalAppVersion()
print("storeVersion: \(storeVersion) ; lovalVersion: \(localVersion)")
//判斷是否相等基茵,相等的話刻撒,表示非審核中
if storeVersion == localVersion {
print("版本相同,非審核中耿导,REVIEW_FLAG : false")
//記錄到全局狀態(tài)
REVIEW_FLAG = false
return false
}
//本地與商店版本不相等,需要比較才能確定
//根據(jù) . 拆分字符串為數(shù)組 [Substring]态贤,
//如 "1.0.0" -> ["1", "0", "0"] 舱呻; "1.0.1" -> ["1", "0", "1"]
var storeArr = storeVersion.split(separator: ".")
var localArr = localVersion.split(separator: ".")
//拆分后的數(shù)組長(zhǎng)度,有可能會(huì)出現(xiàn)不一致,比如本地版本 "1.0.0" 線上版本 "1.0.0.1"
let storeCount = storeArr.count
let localCount = localArr.count
print("storeArrCount: \(storeCount) appArrCount:\(localCount)")
//處理版本數(shù)組長(zhǎng)度不同的問(wèn)題箱吕,補(bǔ)齊用的數(shù)組芥驳,默認(rèn)用 0 補(bǔ)齊
let tmpArr = [Substring](repeating: "0", count: abs(storeCount - localCount))
print("tmpArr: \(tmpArr)")
//補(bǔ)齊數(shù)組長(zhǎng)度,防止越界的發(fā)生
if storeCount < localCount {
//補(bǔ)齊商店拆分后的數(shù)組
storeArr.append(contentsOf: tmpArr)
}else if localCount < storeCount {
//補(bǔ)齊本地 app 的數(shù)組
localArr.append(contentsOf: tmpArr)
}
//打印補(bǔ)齊后的數(shù)組
print("storeArr:\(storeArr) localArr:\(localArr)")
//依次比較數(shù)組中的數(shù)字
var isReviewing = false
for index in 0 ..< storeArr.count {
// 轉(zhuǎn)為 Int茬高,如果本地版本號(hào)大兆旬,表示在審核中
if Int(localArr[index]) ?? 0 > Int(storeArr[index]) ?? 0 {
isReviewing = true
break
}
}
//記錄到全局狀態(tài)
REVIEW_FLAG = isReviewing
print("是否為審核版本 REVIEW_FLAG : \(isReviewing)")
return isReviewing
}