🍏
[Kotlin]アプリのバージョン比較処理
概要
アプリでバージョンアップの処理の中で、
1.0.1
などの文字列のバージョン比較が必要な場面での参考に。
参考記事は↓↓こちらです。
実装
前提条件として、
文字列の1.0.1
など他の型では扱えない場合を考慮する。
比較処理
class ComparableVersion(version: String) : Comparable<ComparableVersion> {
private var parts: List<String>
init {
if (!version.matches(Regex("[0-9]+(\\.[0-9]+)+"))) {
throw IllegalAccessException("Invalid version format")
}
this.parts = version.split(Regex("\\."))
}
override fun compareTo(other: ComparableVersion): Int {
val length = this.parts.size.coerceAtLeast(other.parts.size)
for (i in 0 until length) {
val thisPart = if (i < this.parts.size) this.parts[i].toInt() else 0
val otherPart = if (i < other.parts.size) other.parts[i].toInt() else 0
if (thisPart < otherPart) {
return -1
}
if (thisPart > otherPart) {
return 1
}
}
return 0
}
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other == null) return false
if (this::class.java.name != other::class.java.name) {
return false
}
return this.compareTo(other as ComparableVersion) == 0
}
}
使用例
val updateVersion = ComparableVersion("2.0.0")
val currentVersion = ComparableVersion(BuildConfig.VERSION_NAME)
if (updateVersion.compareTo(currentVersion) == 0) {
// アップデートバージョンと現バージョンが同じ場合
}
iOSの場合
Discussion