Как сохранить значение, как "2.3.1" в числах в iOS? - PullRequest
0 голосов
/ 07 декабря 2018

Я хочу сохранить значение как 3.2.7 в Numbers в iOS, потому что я хочу сравнить это значение с другим.

Есть ли доступный тип данных?или какие нибудь хитрости?

у кого-нибудь есть решение для этого?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Это почти наверняка дубликат Сравнить номера версий в Objective-C .

Как говорит принятый ответ, строки типа @"3.2.1" и @"2.3.7" are strings, not numbers — but they can be compared in the intuitively numeric way as version strings, by calling сравнивают: варианты: `с параметром NSNumericSearch.

И если это не совсем удовлетворяет ваши потребности, другие ответы предоставляют множество полезных настроек алгоритма сравнения.

0 голосов
/ 08 декабря 2018

Если вы хотите реализовать что-то подобное в 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)
...