我想在iOS中的Numbers中存储一个类似3.2.7的值,因为我想和其他人比较一下价值。
是否有可用的数据类型?还是什么把戏?
有人能解决这个问题吗?
这几乎可以肯定是Objective-C中Compare版本号的重复。
正如接受的答案告诉你的那样,像@"3.2.1"
和@"2.3.7"
这样的字符串是字符串,而不是数字,但它们可以通过使用NSNumericSearch选项调用compare:options:
,以直观的数字方式作为版本字符串进行比较。
如果这不能完全满足你的需求,其他答案会为比较算法提供许多有用的调整。
如果你想在Swift中实现这样的东西,你可能会得到以下东西:
struct Version: Comparable, Equatable {
static func == (lhs: Version, rhs: Version) -> Bool {
return lhs.maj == rhs.maj && lhs.min == rhs.min && lhs.patch == rhs.patch
}
static func < (lhs: Version, rhs: Version) -> Bool {
if lhs.maj < rhs.maj || lhs.min < rhs.min || lhs.patch < rhs.patch { return true }
return false
}
var maj: Int
var min: Int
var patch: Int
var formatted: String {
return "(maj).(min).(patch)"
}
}
let v1 = Version(maj: 1, min: 2, patch: 2)
let v2 = Version(maj: 1, min: 2, patch: 2)
let v3 = Version(maj: 2, min: 2, patch: 2)
let v4 = Version(maj: 1, min: 3, patch: 2)
let v5 = Version(maj: 1, min: 2, patch: 3)
print (v1 == v2)
print (v1 == v3)
print (v1 > v2)
print (v1 > v3)
print (v1 > v4)
print (v1 > v5)
print (v3 > v4)
print (v3 > v5)
print (v1.formatted)
print (v2.formatted)
print (v3.formatted)
print (v4.formatted)
print (v5.formatted)