【问题标题】:iOS 13 : Space grouping separator changediOS 13:空间分组分隔符已更改
【发布时间】:2020-03-04 07:55:09
【问题描述】:

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

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

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

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

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

根据当前 iOS 版本始终使用正确的空间分组分隔符有什么想法吗?

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

编辑 2currencyGroupingSeparator 也随着 NNBSP 的变化而变化,所有货币分组分隔符都已替换为新的。

【问题讨论】:

  • currencyGroupingSeparator 设置为常规空间是否可行?

标签: ios objective-c swift numberformatter


【解决方案1】:

好的,终于找到解决办法了:

  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)
}

【讨论】:

  • 即使我也遇到过这个问题。如果他们在新版本的 iOS 中不断修改分隔符,那么我们将不得不每次添加“replacingOccurrences”方法。
猜你喜欢
  • 1970-01-01
  • 2018-10-12
  • 2013-06-25
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多