Избегание неразрывного пробела с помощью NumberFormatter

#swift #number-formatting #nsnumberformatter

#swift #форматирование чисел #nsnumberformatter

Вопрос:

У меня есть NumberFormatter настройка, подобная следующей:

 let currencyFormatter = NumberFormatter()
currencyFormatter.usesGroupingSeparator = true
currencyFormatter.groupingSeparator = "."
currencyFormatter.numberStyle = .currency
currencyFormatter.locale = Locale(identifier: "it_IT")
currencyFormatter.currencySymbol = ""
 

Мне нужно получить значение на основе строкового значения в качестве входных данных.

 currencyFormatter.number(from: "1.000,00") // nil
currencyFormatter.number(from: "1.000,00u{00a0}") // 1000
 

В первом примере форматировщик возвращает nil , а во втором я получаю правильное значение ( u{00a0} символ неразрывного пробела).

Есть ли способ заставить первый образец работать без добавления символа пробела?

Комментарии:

1. Не имеет смысла. Вы ссылаетесь на два разных форматирования, currencyFormatter и formatter .

2. @matt моя ошибка при написании вопроса. исправлено

Ответ №1:

Если нет символа валюты, стиль этого средства форматирования чисел должен быть .decimal , а не .currency . Этого достаточно:

 let currencyFormatter = NumberFormatter()
currencyFormatter.numberStyle = .decimal
currencyFormatter.locale = Locale(identifier: "it_IT")
 

Комментарии:

1. Действительно, если вы скажете .currency , программа форматирования становится очень придирчивой к тому, что она примет (как вы уже обнаружили). Он ожидает, что за пробелом следует знак евро, и больше ничего не будет делать. Я не знаю, почему неразрывное пространство разрушает это. Но дело в том, что, если вы говорите .decimal , оба ваших входных сигнала работают.