cocoa touch - buttons - ¿Cómo obtengo una lista de países en Swift ios?
uicontrol swift (8)
Ya he visto dos preguntas similares a las mías, pero las respuestas a esas preguntas no funcionan para mí. Tengo un proyecto antiguo con una lista de países escritos manualmente dentro de un conjunto de corchetes.
Puedo usar esto fácilmente en mi pickerView pero me pregunto si hay una manera más eficiente de hacerlo.
Usaré la lista de países en un UIPickerView.
Alternativamente, puede tenerlo en swift 4 y localizado por el idioma del sistema.
import Foundation
struct Country {
let name: String
let code: String
}
final class CountryHelper {
class func allCountries() -> [Country] {
var countries = [Country]()
for code in Locale.isoRegionCodes as [String] {
if let name = Locale.autoupdatingCurrent.localizedString(forRegionCode: code) {
countries.append(Country(name: name, code: code))
}
}
return countries
}
}
Aquí está la respuesta de @vedo27 en Swift 3
let countries = NSLocale.isoCountryCodes.map { (code:String) -> String in
let id = NSLocale.localeIdentifier(fromComponents: [NSLocale.Key.countryCode.rawValue: code])
return NSLocale(localeIdentifier: "en_US").displayName(forKey: NSLocale.Key.identifier, value: id) ?? "Country not found for code: /(code)"
}
Igual que el de Ian pero más corto.
let countries = NSLocale.ISOCountryCodes().map { (code:String) -> String in
let id = NSLocale.localeIdentifierFromComponents([NSLocaleCountryCode: code])
return NSLocale(localeIdentifier: "en_US").displayNameForKey(NSLocaleIdentifier, value: id) ?? "Country not found for code: /(code)"
}
print(countries)
Swift 3 declarado como una var
:
var countries: [String] {
let myLanguageId = "en" // in which language I want to show the list
return NSLocale.isoCountryCodes.map {
return NSLocale(localeIdentifier: myLanguageId).localizedString(forCountryCode: $0) ?? $0
}
}
También es una buena práctica localizar el nombre mostrado de los países. Así que además de responder vedo27 sería:
let countriesArray = NSLocale.ISOCountryCodes().map { (code:String) -> String in
let id = NSLocale.localeIdentifierFromComponents([NSLocaleCountryCode: code])
let currentLocaleID = NSLocale.currentLocale().localeIdentifier
return NSLocale(localeIdentifier: currentLocaleID).displayNameForKey(NSLocaleIdentifier, value: id) ?? "Country not found for code: /(code)"
}
SWIFT 3 y 4
var countries: [String] = []
for code in NSLocale.isoCountryCodes as [String] {
let id = NSLocale.localeIdentifier(fromComponents: [NSLocale.Key.countryCode.rawValue: code])
let name = NSLocale(localeIdentifier: "en_UK").displayName(forKey: NSLocale.Key.identifier, value: id) ?? "Country not found for code: /(code)"
countries.append(name)
}
print(countries)
SWIFT 4
Esta es una forma elegante de hacerlo en Swift 4.
var countries: [String] = {
var arrayOfCountries: [String] = []
for code in NSLocale.isoCountryCodes as [String] {
let id = NSLocale.localeIdentifier(fromComponents: [NSLocale.Key.countryCode.rawValue: code])
let name = NSLocale(localeIdentifier: "en_UK").displayName(forKey: NSLocale.Key.identifier, value: id) ?? "Country not found for code: /(code)"
arrayOfCountries.append(name)
}
return arrayOfCountries
}()
Puede obtener una lista de países utilizando el método ISOCountryCodes()
la clase ISOCountryCodes()
que devuelve una matriz de [AnyObject]
que ha emitido como [String]
. A partir de ahí, obtendrá el nombre del país utilizando el método displayNameForKey
de NSLocale. Se parece a esto:
var countries: [String] = []
for code in NSLocale.ISOCountryCodes() as [String] {
let id = NSLocale.localeIdentifierFromComponents([NSLocaleCountryCode: code])
let name = NSLocale(localeIdentifier: "en_UK").displayNameForKey(NSLocaleIdentifier, value: id) ?? "Country not found for code: /(code)"
countries.append(name)
}
println(countries)