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.