Как получить код страны с помощью NSLocale в Swift 3
Не могли бы вы помочь получить код страны с помощью NSLocale
в Swift 3
?
Это предыдущий код, который я использовал.
NSLocale.currentLocale().objectForKey(NSLocaleCountryCode) as! String
Я могу получить код языка, как показано ниже в Swift 3.
Locale.current.languageCode!
Как я вижу, выбор языкаCode выполняется прямо, но свойство countryCode недоступно.
Ответы
Ответ 1
См. Ответ Войцеха N.
для более простого решения!
Аналогично, как в NSLocale Swift 3, вам нужно наложить тип наложения Locale
на его
Foundation counter NSLocale
, чтобы получить код страны:
if let countryCode = (Locale.current as NSLocale).object(forKey: .countryCode) as? String {
print(countryCode)
}
Ответ 2
Свойство regionCode можно использовать для структуры Locale.
Locale.current.regionCode
Это не задокументировано как замена старой конструкции NSLocaleCountryCode, но похоже, что это так. Следующий код проверяет countryCodes для всех известных локалей и сравнивает их с regionCodes. Они идентичны.
public func ==(lhs: [String?], rhs: [String?]) -> Bool {
guard lhs.count == rhs.count else { return false }
for (left, right) in zip(lhs, rhs) {
if left != right {
return false
}
}
return true
}
let newIdentifiers = Locale.availableIdentifiers
let newLocales = newIdentifiers.map { Locale(identifier: $0) }
let newCountryCodes = newLocales.map { $0.regionCode }
let oldIdentifiers = NSLocale.availableLocaleIdentifiers
newIdentifiers == oldIdentifiers // true
let oldLocales = oldIdentifiers.map { NSLocale(localeIdentifier: $0) }
let oldLocalesConverted = oldLocales.map { $0 as Locale }
newLocales == oldLocalesConverted // true
let oldComponents = oldIdentifiers.map { NSLocale.components(fromLocaleIdentifier: $0) }
let oldCountryCodes = oldComponents.map { $0[NSLocale.Key.countryCode.rawValue] }
newCountryCodes == oldCountryCodes // true
Ответ 3
print(NSLocale.current.regionCode)