Swift - Get list of countries

。_饼干妹妹 提交于 2019-12-20 10:53:59

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!