iOS 13: разделитель группировки пробелов изменен - PullRequest
1 голос
/ 04 марта 2020

Мы используем NumberFormatter класс для форматирования некоторых сумм в приложении. Поскольку мы мигрировали на iOS 13, кажется, что groupingSeparator пробел , используемый для локали fr_FR, изменился.

У нас есть тесты на количество отформатированных строк, таких как:

var amount = "1000"
XCTAssertEqual(amount.formattedValue, "1 000,00")

Вкл. iOS <13 </strong>. Этот тест пройден успешно. Но если мы запустим тест для iOS> 13 , этот тест не пройден.

Причина в том, что тип пространства, используемого для свойства groupingSeparator NumberFormatter в iOS 13 изменилось, поэтому 1 000,00 не будет равно 1 000,00 в соответствии с используемым разделителем группировки пробелов.

Любая идея всегда использовать правильный разделитель группировки пробелов в соответствии с текущей версией iOS?

Редактировать : Мы обнаружили, что используемое пространство на iOS 13 теперь NARROW NO-BREAK SPACE

Редактировать 2 : currencyGroupingSeparator также имеет изменен с NNBSP, все разделители группировки валют были заменены на этот новый.

1 Ответ

1 голос
/ 04 марта 2020

Хорошо, наконец, найдено решение:

  1. Определено расширение String, которое заменяет все новые пробелы строки на оригинальный пробел.

    public extension String {
        var originalWhiteSpaced: String {
                let narrowNonBreakingSpace = "\u{202F}"
                let nonBreakingSpace = "\u{00a0}"
    
            return self
                .replacingOccurrences(of: narrowNonBreakingSpace, with: " ")
                .replacingOccurrences(of: nonBreakingSpace, with: " ")
        }}
    

И используйте его в тестах:

func testIsFormattingOfAmountCurrencyCorrectWhenAmountIsNegative() {
    let actualResult = formatter.formatAmountCurrency(-123472).originalWhiteSpaced
    let expectedResult = "- 123 472,00 €"

    XCTAssertEqual(actualResult, expectedResult)
}
...