Автоматически добавлять знак плюс с максимальным значением после его достижения - PullRequest
0 голосов
/ 10 января 2019

Возможно ли, что NumberFormatter (или любая другая сборка в классе / структуре) вернет локализованный знак плюс с определенным максимальным значением после его достижения? Я попробовал это:

let numberFormatter = NumberFormatter()

numberFormatter.maximum = 9

print(numberFormatter.string(from: 10))

Но он просто возвращает "10", я ожидаю / надеялся на "9+" (потому что моя локализация установлена ​​на английский, таким образом, + это здесь знак плюс и добавляется после 9, так как мы читаем слева направо). Можно ли использовать существующий класс / структуру (я думал, что NumberFormatter может сделать эту работу), которая может обрабатывать локализацию встроенного знака плюс? На другом языке знак плюс отличается и может быть даже перед номером.

Я не хочу добавлять знак плюс вручную.

Я думаю, что NumberFormatter должен быть в состоянии локализовать знак плюс: https://developer.apple.com/documentation/foundation/numberformatter/1416423-plussign

Ответы [ 3 ]

0 голосов
/ 10 января 2019

Это работает, хотя может и не соответствовать тому, что вы ищете.

let numberFormatter = NumberFormatter()

numberFormatter.maximum = 9

func formatMax(_ s: Int) -> String {
        if numberFormatter.number(from: String(s)) == nil {
            return "\(numberFormatter.maximum!)" + "+"
        } else {
            return String(s)
        }
}

print(formatMax(11))
0 голосов
/ 10 января 2019

Это не работа NumberFormatter, но вот простая функция, чтобы сделать это для вас:

func ffs(_ number:NSNumber) -> String{
    let max = 9
    if (Int(truncating: number) > max){
        return "\(max)+"} else {
        return "\(number)"
    }
}

А затем распечатать (ffs (10))

0 голосов
/ 10 января 2019

Вот решение, которое поместило бы знак плюс справа или слева от числа в зависимости от направления языка текущей локали:

func format(number: Double, limit: Double) -> String {

    if let languageCode = Locale.current.languageCode, number > limit {
        let direction = Locale.characterDirection(forLanguage: languageCode)
        if direction == .leftToRight {
            return "\(limit)" + NumberFormatter().plusSign
        } else {
            return NumberFormatter().plusSign + "\(limit)"
        }
    } else {
        return "\(number)"
    }
}

format(number: 10, limit: 9)  //"9.0+"
...