2014-06-19 166 views
5

如何在Swift中獲得包含所有國家/地區名稱的數組? 我試圖代碼我不得不在Objective-C,這是轉換這樣的:Swift - 獲取國家列表

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 

難道你們有誰知道對這個?

感謝

回答

3

所有ISOCountryCodes首先需要論證括號這樣反而會是ISOCountryCodes()。其次,你不需要圍繞NSLocaleISOCountryCodes()括號。而且,arrayWithCapacity已被棄用,這意味着它從語言中被刪除。這方面的一個工作版本會有點像這個

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

我得到的數組零個元素! – Kirti

1

這是一個操作不是一個屬性

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

這裏有一個斯威夫特擴展NSLocale返回斯威夫特友好的語言環境結構的數組與國名和國家代碼。它可以很容易地擴展到包括其他國家的數據。

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)") 
}