2

我们使用NumberFormatter类来格式化应用程序中的一些金额。由于我们在 iOS 13 上迁移,用于 Locale的groupingSeparator 空间似乎发生了fr_FR变化。

我们对格式化字符串数量进行了测试,例如:

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

iOS < 13上,此测试成功。但是如果我们在iOS > 13上启动测试,这个测试就会失败。

原因是因为NumberFormatteriOS 13 中 groupingSeparator 属性使用的空间类型发生了变化,所以 根据使用的空间分组分隔符1 000,00将不相等。1 000,00

任何想法始终根据当前的 iOS 版本使用正确的空间分组分隔符?

编辑:我们发现 iOS 13 上的已用空间现在是NARROW NO-BREAK SPACE

编辑 2currencyGroupingSeparatorNNBSP 也发生了变化,所有货币分组分隔符都被这个新的分隔符替换了。

4

1 回答 1

2

好的,终于找到了解决方案:

  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)
}
于 2020-03-04T13:45:51.467 回答