Comment obtenir le code de pays en utilisant NSLocale dans Swift 3
pourriez-vous nous aider à obtenir le code de pays en utilisant NSLocale
dans Swift 3
?
C'est le code précédent que j'ai utilisé.
NSLocale.currentLocale().objectForKey(NSLocaleCountryCode) as! String
je peux obtenir le Code de langue comme ci-dessous dans Swift 3.
Locale.current.languageCode!
comme je peux le voir, récupérer le languageCode est simple mais la propriété countryCode n'est pas disponible.
4 réponses
voir réponse de Wojciech N. pour une solution plus simple!
de même que dans NSLocale Swift 3 , vous devez mouler le type de superposition Locale
retour à son
Contrepartie de la fondation NSLocale
afin de récupérer le code de pays:
if let countryCode = (Locale.current as NSLocale).object(forKey: .countryCode) as? String {
print(countryCode)
}
vous pouvez utiliser la propriété regionCode sur la structure Locale.
Locale.current.regionCode
il n'est pas documenté comme un substitut à une ancienne construction NSLocaleCountryCode mais il semble qu'il est. Le code suivant vérifie les codes de pays pour toutes les locales connues et les compare avec les codes de région. Ils sont identiques.
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: "151910920") }
let newCountryCodes = newLocales.map { "151910920".regionCode }
let oldIdentifiers = NSLocale.availableLocaleIdentifiers
newIdentifiers == oldIdentifiers // true
let oldLocales = oldIdentifiers.map { NSLocale(localeIdentifier: "151910920") }
let oldLocalesConverted = oldLocales.map { "151910920" as Locale }
newLocales == oldLocalesConverted // true
let oldComponents = oldIdentifiers.map { NSLocale.components(fromLocaleIdentifier: "151910920") }
let oldCountryCodes = oldComponents.map { "151910920"[NSLocale.Key.countryCode.rawValue] }
newCountryCodes == oldCountryCodes // true
si vous vous assurez que vous utilisez une instance NSLocale
et non Locale
, vous pouvez utiliser la propriété 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 vous essayez d'utiliser countryCode
avec un Swift Locale
Xcode vous donnera une erreur avec une suggestion d'utiliser regionCode
à la place:
let swiftLocale: Locale = Locale.current
let swiftCountry: String? = swiftLocale.countryCode
// > Error "countryCode' is unavailable: use regionCode instead"