我有一个菜单,可以让用户选择一个国家,就像通讯录中地址字段中的国家菜单一样。
有没有人知道获取国家列表的简单方法?我已经使用NSLocale生成了一个国家数组,但不幸的是只有国家代码,而不是对应的可读字符串。我不想要“GB”,我想要“英国”。
我有一个菜单,可以让用户选择一个国家,就像通讯录中地址字段中的国家菜单一样。
有没有人知道获取国家列表的简单方法?我已经使用NSLocale生成了一个国家数组,但不幸的是只有国家代码,而不是对应的可读字符串。我不想要“GB”,我想要“英国”。
感谢Chuck。
如果有人有兴趣或者想要找到相同的解决方案,这里是我用于排序国家数组的代码。
Objective-C:
NSLocale *locale = [NSLocale currentLocale];
NSArray *countryArray = [NSLocale ISOCountryCodes];
NSMutableArray *sortedCountryArray = [[NSMutableArray alloc] init];
for (NSString *countryCode in countryArray) {
NSString *displayNameString = [locale displayNameForKey:NSLocaleCountryCode value:countryCode];
[sortedCountryArray addObject:displayNameString];
}
[sortedCountryArray sortUsingSelector:@selector(localizedCompare:)];
Swift:
let locale = NSLocale.currentLocale()
let countryArray = NSLocale.ISOCountryCodes()
var unsortedCountryArray:[String] = []
for countryCode in countryArray {
let displayNameString = locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
if displayNameString != nil {
unsortedCountryArray.append(displayNameString!)
}
}
let sortedCountryArray = sorted(unsortedCountryArray, <)
Swift 3
的翻译是:Swift 3
。 let locale = NSLocale.current
let unsortedCountries = NSLocale.isoCountryCodes.map { locale.localizedString(forRegionCode: $0)! }
let sortedCountries = unsortedCountries.sorted()
countryArray.count
的容量来初始化 sortedCountryArray
。 - DeFrenZ使用[[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode]
(其中countryCode是您的国家代码列表中的项目)获取用户当前区域设置下的国家名称。
你可能需要定义本地化(locale)..
而且有太多自动释放的内存,这可能是关键的,你永远不知道。因此,在for循环中也要创建自动释放池。
NSMutableArray * countriesArray = [[NSMutableArray alloc] init];
NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier: @"en_US"] autorelease];
NSArray *countryArray = [NSLocale ISOCountryCodes];
for (NSString *countryCode in countryArray)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *displayNameString = [locale displayNameForKey:NSLocaleCountryCode value:countryCode];
[countriesArray addObject:displayNameString];
[pool release];
}
[countriesArray sortUsingSelector:@selector(compare:)];
Swift 3
let locale = Locale.current
let countries = Locale.isoRegionCodes.map {
locale.localizedString(forRegionCode: $0)!
}.sorted()
flatMap
更短更快。let locale = NSLocale.currentLocale()
var countries = NSLocale.ISOCountryCodes().flatMap { countryCode in
return locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
}
countries.sortInPlace()
在playgrounds上成功运行了这个
let locale = NSLocale(localeIdentifier: "FI")
let unsortedCountries = NSLocale.isoCountryCodes.flatMap { locale.localizedString(forCountryCode: $0) }
let sortedCountries = unsortedCountries.sorted()