在IOS中从国家名称获取国家代码
我从英文服务器检索国名。 例如“西class牙”
我想要做的是,假设国家名称将用英文写成,请获取国家代码。
我该怎么办? 我发现从国家代码中得到国名很容易,但是我不知道如何做相反的操作。
非常感谢。
杰夫的答案在这里有所帮助,只是略有增加。
NSArray *countryCodes = [NSLocale ISOCountryCodes]; NSMutableArray *countries = [NSMutableArray arrayWithCapacity:[countryCodes count]]; for (NSString *countryCode in countryCodes) { NSString *identifier = [NSLocale localeIdentifierFromComponents: [NSDictionary dictionaryWithObject: countryCode forKey: NSLocaleCountryCode]]; NSString *country = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_UK"] displayNameForKey: NSLocaleIdentifier value: identifier]; [countries addObject: country]; } NSDictionary *codeForCountryDictionary = [[NSDictionary alloc] initWithObjects:countryCodes forKeys:countries];
现在通过“codeForCountryDictionary”来查找需要代码的国家的名称,例如,
NSLog(@"%@",[codeForCountryDictionary objectForKey:@"Spain"]);
会产生结果为'ES',这是西class牙的2个字母的国家代码。
在Swift中你将使用这个代码
extension NSLocale { class func locales1(countryName1 : String) -> String { var locales : String = "" for localeCode in NSLocale.ISOCountryCodes() { let countryName = NSLocale.systemLocale().displayNameForKey(NSLocaleCountryCode, value: localeCode)! if countryName1.lowercaseString == countryName.lowercaseString { return localeCode as! String } } return locales } }
获取数据:
strP2countrycode = NSLocale.locales1("PASS_COUNTRYNAME")
在迅速3你可以只使用
let currentLocale = NSLocale.current var countries = NSLocale.isoCountryCodes currentLocale.localizedString(forRegionCode: countries.first!)
使用swift 3(上面的一些答案是缺less一块)
extension NSLocale { class func locales1(countryName1 : String) -> String { let locales : String = "" for localeCode in NSLocale.isoCountryCodes { let countryName = (Locale.current as NSLocale).displayName(forKey: .countryCode, value: localeCode) if countryName1.lowercased() == countryName?.lowercased() { return localeCode } } return locales } }
我的精简版包括修正只匹配英文国名版本。
extension NSLocale { class func localeForCountry(countryName : String) -> String? { return NSLocale.ISOCountryCodes().first{self.countryNameFromLocaleCode($0 as! String) == countryName} as? String } private class func countryNameFromLocaleCode(localeCode : String) -> String { return NSLocale(localeIdentifier: "en_UK").displayNameForKey(NSLocaleCountryCode, value: localeCode) ?? "" } }
这里是达斯奈格代码在3中
extension NSLocale { class func locales1(countryName1 : String) -> String { let locales : String = "" for localeCode in NSLocale.isoCountryCodes { let countryName = Locale.current.regionCode if countryName1.lowercased() == countryName?.lowercased() { return localeCode } } return locales } }
Swift 3.0:
获取国家代码和国家名称为NS Dictionary-
let countryCodes: [AnyObject] = NSLocale.isoCountryCodes as [AnyObject] let countries: NSMutableArray = NSMutableArray(capacity: countryCodes.count) for countryCode in countryCodes { let identifier: String = NSLocale.localeIdentifier(fromComponents: NSDictionary(object: countryCode, forKey: NSLocale.Key.countryCode as NSCopying) as! [String : String]) let country: String = NSLocale(localeIdentifier: "en_US").displayName(forKey: NSLocale.Key.identifier, value: identifier)! countries.add(country) } let codeForCountryDictionary: [NSObject : AnyObject] = NSDictionary(objects: countryCodes, forKeys: countries as! [NSCopying]) as [NSObject : AnyObject] print(codeForCountryDictionary)
这是如何在Swift 4.0中完成的(也可以在Swift 3.2中使用)。
NSLocale.isoCountryCodes.forEach { (code) in print(code) let name = NSLocale(localeIdentifier: "zh_CN").displayName(forKey: NSLocale.Key.countryCode, value: code) print(name) }