ios swift3 nslocale

ios - formatter swift



Cómo obtener el código de país usando NSLocale en Swift 3 (4)

¿Podría ayudarnos a obtener el código de país mediante NSLocale en Swift 3 ?

Este es el código anterior que he estado usando.

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

Puedo obtener el código de idioma como abajo en Swift 3.

Locale.current.languageCode!

Como puedo ver, ir a languageCode es sencillo pero la propiedad countryCode no está disponible.


Puede usar la propiedad regionCode en Locale struct.

Locale.current.regionCode

No está documentado como un sustituto del antiguo constructo NSLocaleCountryCode, pero parece que sí lo está. El siguiente código comprueba countryCodes para todas las configuraciones regionales conocidas y las compara con regionCodes. Ellos son idénticos.

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


Si se asegura de que está utilizando una NSLocale y no de una NSLocale Locale , puede usar la propiedad countryCode :

let locale: NSLocale = NSLocale.current as NSLocale let country: String? = locale.countryCode print(country ?? "no country") // > Prints "IE" or some other country code

Si intenta usar countryCode con Swift Locale Xcode le dará un error con una sugerencia para usar regionCode en regionCode lugar:

let swiftLocale: Locale = Locale.current let swiftCountry: String? = swiftLocale.countryCode // > Error "countryCode'' is unavailable: use regionCode instead"


¡Vea la respuesta de Wojciech N. para una solución más simple!

De forma similar a NSLocale Swift 3 , debe volver a NSLocale el tipo de superposición Locale a su contraparte de Fundación NSLocale para recuperar el código de país:

if let countryCode = (Locale.current as NSLocale).object(forKey: .countryCode) as? String { print(countryCode) }


print(NSLocale.current.regionCode)