2015-01-10 2 views
16

Я уже видел два похожих вопроса, но ответы на эти вопросы не работают для меня. У меня есть старый проект со списком стран, вручную напечатанным внутри набора квадратных скобок.Как получить список стран в Swift ios?

Я могу легко использовать это в моем pickerView, но мне интересно, есть ли более эффективный способ сделать это?

Я буду использовать список стран в UIPickerView.

ответ

23

Вы можете получить список стран, используя метод классакласса NSLocale, который возвращает массив [AnyObject], который вы нарисовали как [String]. Оттуда вы получаете название страны, используя метод NSNSLocale. Это выглядит следующим образом:

var countries: [String] = [] 

for code in NSLocale.ISOCountryCodes() as [String] { 
    let id = NSLocale.localeIdentifierFromComponents([NSLocaleCountryCode: code]) 
    let name = NSLocale(localeIdentifier: "en_UK").displayNameForKey(NSLocaleIdentifier, value: id) ?? "Country not found for code: \(code)" 
    countries.append(name) 
    } 

println(countries) 
8

же, как и Ян, но короче

let countries = NSLocale.ISOCountryCodes().map { (code:String) -> String in 
    let id = NSLocale.localeIdentifierFromComponents([NSLocaleCountryCode: code]) 
    return NSLocale(localeIdentifier: "en_US").displayNameForKey(NSLocaleIdentifier, value: id) ?? "Country not found for code: \(code)" 
} 

print(countries) 
2

также это хорошая практика, чтобы локализовать отображаемое имя страны. Таким образом, в дополнение к vedo27 ответить было бы:

let countriesArray = NSLocale.ISOCountryCodes().map { (code:String) -> String in 
     let id = NSLocale.localeIdentifierFromComponents([NSLocaleCountryCode: code]) 
     let currentLocaleID = NSLocale.currentLocale().localeIdentifier 
     return NSLocale(localeIdentifier: currentLocaleID).displayNameForKey(NSLocaleIdentifier, value: id) ?? "Country not found for code: \(code)" 
    } 
5

Вот @ ответ vedo27 «ы в Swift 3

let countries = NSLocale.isoCountryCodes.map { (code:String) -> String in 
    let id = NSLocale.localeIdentifier(fromComponents: [NSLocale.Key.countryCode.rawValue: code]) 
    return NSLocale(localeIdentifier: "en_US").displayName(forKey: NSLocale.Key.identifier, value: id) ?? "Country not found for code: \(code)" 
} 
3

Swift 3 объявлен как var:

var countries: [String] { 
    let myLanguageId = "en" // in which language I want to show the list 
    return NSLocale.isoCountryCodes.map { 
     return NSLocale(localeIdentifier: myLanguageId).localizedString(forCountryCode: $0) ?? $0 
    } 
} 
+0

localizedString (forCountryCode: code) доступен только от iOS10 – Rajesh73

+0

Да, это правильно –

8

СВИФТ 3 и 4

var countries: [String] = [] 

for code in NSLocale.isoCountryCodes as [String] { 
    let id = NSLocale.localeIdentifier(fromComponents: [NSLocale.Key.countryCode.rawValue: code]) 
    let name = NSLocale(localeIdentifier: "en_UK").displayName(forKey: NSLocale.Key.identifier, value: id) ?? "Country not found for code: \(code)" 
    countries.append(name) 
} 

print(countries) 
Смежные вопросы