在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) }