问题
How can I get an array with all countries names in Swift? I've tried to convert the code I had in Objective-C, which was this:
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];
}
And in Swift I can't pass from here:
if (!countriesPickerShown) {
var countries: NSMutableArray = NSMutableArray()
countries = NSMutableArray.arrayWithCapacity((NSLocale.ISOCountryCodes).count) // Here gives the Error. It marks NSLocale.ISOCountryCodes and .count
Does anyone of you know about this?
Thanks
回答1:
First of all ISOCountryCodes
requires argument parenthesis so instead it would be ISOCountryCodes()
. Second, you dont need parenthesis around NSLocale
and ISOCountryCodes()
. Also, arrayWithCapacity is deprecated meaning it is removed from the language. A working version of this would be somewhat like this
if (!countriesPickerShown) {
var countries = NSMutableArray()
countries = NSMutableArray(capacity: (NSLocale.ISOCountryCodes().count))
}
回答2:
Here's a Swift extension to NSLocale that returns an array of Swift-friendly Locale structs with the country names and country codes. It could easily be extended to include other country data.
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
}
}
And then it's easy to get the array of countries like this:
for locale in NSLocale.locales() {
println("\(locale.countryCode) - \(locale.countryName)")
}
回答3:
It is an Operation not a Property
if let codes = NSLocale.ISOCountryCodes() {
println(codes)
}
来源:https://stackoverflow.com/questions/24315741/swift-get-list-of-countries