Подтвердить что ты не робот

Как получить код страны с помощью NSLocale в Swift 3

Не могли бы вы помочь получить код страны с помощью NSLocale в Swift 3?

Это предыдущий код, который я использовал.

NSLocale.currentLocale().objectForKey(NSLocaleCountryCode) as! String

Я могу получить код языка, как показано ниже в Swift 3.

Locale.current.languageCode!

Как я вижу, выбор языкаCode выполняется прямо, но свойство countryCode недоступно.

4b9b3361

Ответ 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)