5

如何在 Swift 中获取包含所有国家/地区名称的数组?我试图转换我在 Objective-C 中的代码,它是这样的:

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];
    }

而在斯威夫特我不能从这里过去:

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

你们有谁知道这件事吗?

谢谢

4

3 回答 3

5

这是 NSLocale 的 Swift 扩展,它返回一个包含国家名称和国家代码的 Swift 友好的 Locale 结构数组。它可以很容易地扩展到包括其他国家数据。

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
    }

}

然后很容易得到这样的国家数组:

for locale in NSLocale.locales() {
    println("\(locale.countryCode) - \(locale.countryName)")
}
于 2015-05-11T18:41:19.243 回答
3

首先ISOCountryCodes需要参数括号,所以它会是ISOCountryCodes(). 其次,您不需要在 and 周围NSLocale加上括号ISOCountryCodes()。此外,不推荐使用 arrayWithCapacity ,这意味着它已从语言中删除。这个的工作版本有点像这样

if (!countriesPickerShown) {
    var countries = NSMutableArray()
    countries = NSMutableArray(capacity: (NSLocale.ISOCountryCodes().count))
}
于 2014-06-19T20:45:08.740 回答
2

这是一个操作而不是一个属性

if let codes = NSLocale.ISOCountryCodes() {
    println(codes)
}
于 2014-06-19T20:42:11.820 回答