2014-06-19 22 views
5

Jak mogę uzyskać tablicę ze wszystkimi nazwami krajów w Swift? Próbowałem przekonwertować kod miałem w Objective-C, który był w tym:Swift - Uzyskaj listę krajów

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

A Swift nie mogę przejść stąd:

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

Czy ktoś z was wie o tym?

Dzięki

Odpowiedz

3

Przede wszystkim ISOCountryCodes wymaga nawias argumentów więc zamiast byłoby ISOCountryCodes(). Po drugie, nie potrzebujesz nawiasów wokół NSLocale i ISOCountryCodes(). Ponadto właściwość arrayWithCapacity jest przestarzała, co oznacza, że ​​została usunięta z języka. Wersja robocza to byłoby trochę jak ten

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

jestem coraz zerowe elementy w tablicy! – Kirti

1

Jest to operacja nie Property

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

Oto Swift rozszerzenie NSLocale że zwraca tablicę Swift przyjaznych elemencie ustawień regionalnych z nazwami państw i kodów krajów. Można go łatwo rozszerzyć o dane z innych krajów.

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 
    } 

} 

I wtedy łatwo jest uzyskać szereg krajów tak:

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