NumberFormatter неправильно определяет настройки валюты Locale в бета-версии iOS 17 с бета-версией Xcode 15.0

В настоящее время я разрабатываю приложение для iOS и недавно обновился доiOS 17 betaвместе сXcode 15.0 beta. Я пытаюсь использоватьNumberFormatterотформатироватьDoubleв строку валюты (в моем случае, американские доллары $). Вот фрагмент моего кода:

      let formatter = NumberFormatter()
formatter.currencySymbol = Locale.current.currencySymbol
print(Locale.current.currency)
print(Locale.current.currencySymbol)
print(Locale.current.currency?.identifier)
print(Locale.current)
formatter.numberStyle = .currency

При запуске на iOS 16 я получаю следующий результат:

      Optional(Foundation.Locale.Currency(_identifier: "USD", _normalizedIdentifier: "usd"))
Optional("$")
Optional("USD")
en_US (current)

Однако при запуске того же кода на бета-версии iOS 17 результат будет другим:

      nil
Optional("¤")
nil
en_001 (fixed)

Похоже, что свойства валюты и идентификатора локали возвращают ноль, а сама локаль идентифицируется по-другому.

Кто-нибудь еще сталкивался с этой проблемой в бета-версии iOS 17 и бета-версии Xcode 15.0? Это ошибка в бета-версиях или были ли внесены изменения в способ использования локали для форматирования валюты?

2 ответа

Я тоже столкнулся с этим, но исправить это просто: запустите приложение «Настройки симулятора» и выберите «Основные» > «Язык и регион». Вы заметите, что для региона по умолчанию установлено значение «мир», и я предполагаю, что это приведет кen_001языковой код. Измените регион на любой языковой стандарт, с которым вы хотите работать, и вы получите более конкретный код ISO.

Я не уверен, связано ли это с изменением iOS 17 или с бета-версией симулятора или чем-то еще, но, вероятно, стоит отметить, что «мир» может стать законным регионом в ближайшем будущем.

Удачи!

Я заметил нечто подобное при создании Xcode 15 приложения для macOS... Кажется, он использует какой-то странный локаль.en_001, что имело некоторые непредвиденные побочные эффекты, такие как установкаCalendar.current.firstWeekdayдо 2 вместо 1, как должно быть в григорианском календаре.

Я думаю, что это ошибка в Xcode.

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