rul*_*ilg 5 arrays countries ios nslocale swift
如何在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];
}
Run Code Online (Sandbox Code Playgroud)
在斯威夫特我无法从这里传递:
if (!countriesPickerShown) {
var countries: NSMutableArray = NSMutableArray()
countries = NSMutableArray.arrayWithCapacity((NSLocale.ISOCountryCodes).count) // Here gives the Error. It marks NSLocale.ISOCountryCodes and .count
Run Code Online (Sandbox Code Playgroud)
你们有谁知道这个吗?
谢谢
这是 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
}
}
Run Code Online (Sandbox Code Playgroud)
然后很容易得到这样的国家数组:
for locale in NSLocale.locales() {
println("\(locale.countryCode) - \(locale.countryName)")
}
Run Code Online (Sandbox Code Playgroud)
首先ISOCountryCodes需要参数括号,所以它会是ISOCountryCodes(). NSLocale其次, and不需要括号ISOCountryCodes()。此外, arrayWithCapacity 已被弃用,这意味着它已从语言中删除。这个的工作版本有点像这样
if (!countriesPickerShown) {
var countries = NSMutableArray()
countries = NSMutableArray(capacity: (NSLocale.ISOCountryCodes().count))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9656 次 |
| 最近记录: |