Swift – Obtén una list de países

¿Cómo puedo get una matriz con todos los nombres de países en Swift? He intentado convertir el código que tenía en Objective-C, que era este:

if (!pickerCountriesIsShown) { NSMutableArray *countries = [NSMutableArray arrayWithCapacity: [[NSLocale ISOCountryCodes] count]]; for (NSString *countryCode in [NSLocale ISOCountryCodes]) { NSString *identifier = [NSLocale localeIdentifierFromComponents: [NSDictionary dictionaryWithObject: countryCode forKey: NSLocaleCountryCode]]; NSString *country = [[NSLocale currentLocale] displayNameForKey: NSLocaleIdentifier value: identifier]; [countries addObject: country]; } 

Y en Swift no puedo pasar de aquí:

  if (!countriesPickerShown) { var countries: NSMutableArray = NSMutableArray() countries = NSMutableArray.arrayWithCapacity((NSLocale.ISOCountryCodes).count) // Here gives the Error. It marks NSLocale.ISOCountryCodes and .count 

¿Alguien de ustedes lo sabe?

Gracias

En primer lugar, ISOCountryCodes requiere un paréntesis de argumento, por lo que sería ISOCountryCodes() . En segundo lugar, no necesita paréntesis alnetworkingedor de NSLocale e ISOCountryCodes() . Además, arrayWithCapacity está en desuso, lo que significa que se elimina del idioma. Una versión funcional de esto sería algo así

 if (!countriesPickerShown) { var countries = NSMutableArray() countries = NSMutableArray(capacity: (NSLocale.ISOCountryCodes().count)) } 

Aquí hay una extensión de Swift a NSLocale que devuelve una serie de estructuras locales de Swift con los nombres de los países y los códigos de país. Podría extenderse fácilmente para include otros datos del país.

 extension NSLocale { struct Locale { let countryCode: String let countryName: String } class func locales() -> [Locale] { var locales = [Locale]() for localeCode in NSLocale.ISOCountryCodes() { let countryName = NSLocale.systemLocale().displayNameForKey(NSLocaleCountryCode, value: localeCode)! let countryCode = localeCode as! String let locale = Locale(countryCode: countryCode, countryName: countryName) locales.append(locale) } return locales } } 

Y luego es fácil get la variedad de países como este:

 for locale in NSLocale.locales() { println("\(locale.countryCode) - \(locale.countryName)") } 

Es una operación no una propiedad

 if let codes = NSLocale.ISOCountryCodes() { println(codes) }