Борьба с NSNumberFormatter в Swift для десятичных чисел

У меня есть 2 функции, которые преобразуют строки (десятичные числа, передаваемые в виде строки) в локализованные числа, и наоборот. Вот код:

static func localizedNumberForText(text: String) -> String {
    let num = Double(text)
    let formatter = NumberFormatter()
    formatter.numberStyle = .decimal
    formatter.maximumFractionDigits = 30;

    if num != nil {
        return  formatter.string(from: num! as NSNumber)!
    } else {
        return text
    }
}

static func stringFromLocalizedNumber(text: String) -> String {
    let formatter = NumberFormatter()
    formatter.numberStyle = .decimal
    formatter.maximumFractionDigits = 30;
    let num = formatter.number(from: text)

    if let number = num {
        return String(describing: number)
    } else {
        return text
    }
}

Это прекрасно работает со статическими значениями, но у меня есть проблема, которая пока UITextField редактируется мне нужно отформатировать локализованную строку по-другому. Вот пример, который работает: - У меня есть номер 123456789, и он хорошо локализован с разделителем тысяч во время отображения следующим образом: 123.456.789

Но когда пользователь внутри UITextField удаляет последний символ из этой строки, он становится 123.456.78 и в функции stringFromLocalizedNumber не удается получить num из текста, потому что отформатированный текст неправильно локализован. Любая идея, как я могу решить эту проблему?

Чего я хочу добиться, так это после того, как пользователь удалит числовой символ или добавит его, чтобы удалить неправильную локализацию и применить новую, которая правильно анализирует эту строку как число.

0 ответов

Другие вопросы по тегам