2017-01-03 6 views
2

Как получить название страны из кода валюты? Это возможно или нет?Как получить название страны из кода валюты?

+8

В € (евро) валюта используется в 25 странах ... –

+0

Если валютные коды вы имеете в виду [ISO 4217 коды] (HTTPS: //en.wikipedia.org/wiki/ISO_4217), вы можете получить [код страны ISO 3166-1 альфа-2] (https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) от первых двух символов в код для ** некоторых ** стран, а затем перепроверить его с указанием названия страны. – user28434

ответ

4

Я нашел весь список кодов валют и стран всего на this link

let codeToCountry = [ 
    "AED" : "United Arab Emirates", 
    "AFN" : "Afghanistan", 
    "ALL" : "Albania", 
    "AMD" : "Armenia", 
    "ANG" : "Netherlands Antilles", 
    "AOA" : "Angola", 
    "ARS" : "Argentina", 
    "AUD" : "Australia, Australian Antarctic Territory, Christmas Island, Cocos (Keeling) Islands, Heard and McDonald Islands, Kiribati, Nauru, Norfolk Island, Tuvalu", 
    "AWG" : "Aruba", 
    "AZN" : "Azerbaijan", 
    "BAM" : "Bosnia and Herzegovina", 
    "BBD" : "Barbados", 
    "BDT" : "Bangladesh", 
    "BGN" : "Bulgaria", 
    "BHD" : "Bahrain", 
    "BIF" : "Burundi", 
    "BMD" : "Bermuda", 
    "BND" : "Brunei", 
    "BOB" : "Bolivia", 
    "BOV" : "Bolivia", 
    "BRL" : "Brazil", 
    "BSD" : "Bahamas", 
    "BTN" : "Bhutan", 
    "BWP" : "Botswana", 
    "BYR" : "Belarus", 
    "BZD" : "Belize", 
    "CAD" : "Canada", 
    "CDF" : "Democratic Republic of Congo", 
    "CHE" : "Switzerland", 
    "CHF" : "Switzerland, Liechtenstein", 
    "CHW" : "Switzerland", 
    "CLF" : "Chile", 
    "CLP" : "Chile", 
    "CNY" : "Mainland China", 
    "COP" : "Colombia", 
    "COU" : "Colombia", 
    "CRC" : "Costa Rica", 
    "CUP" : "Cuba", 
    "CVE" : "Cape Verde", 
    "CYP" : "Cyprus", 
    "CZK" : "Czech Republic", 
    "DJF" : "Djibouti", 
    "DKK" : "Denmark, Faroe Islands, Greenland", 
    "DOP" : "Dominican Republic", 
    "DZD" : "Algeria", 
    "EEK" : "Estonia", 
    "EGP" : "Egypt", 
    "ERN" : "Eritrea", 
    "ETB" : "Ethiopia", 
    "EUR" : "European Union, see eurozone", 
    "FJD" : "Fiji", 
    "FKP" : "Falkland Islands", 
    "GBP" : "United Kingdom", 
    "GEL" : "Georgia", 
    "GHS" : "Ghana", 
    "GIP" : "Gibraltar", 
    "GMD" : "Gambia", 
    "GNF" : "Guinea", 
    "GTQ" : "Guatemala", 
    "GYD" : "Guyana", 
    "HKD" : "Hong Kong Special Administrative Region", 
    "HNL" : "Honduras", 
    "HRK" : "Croatia", 
    "HTG" : "Haiti", 
    "HUF" : "Hungary", 
    "IDR" : "Indonesia", 
    "ILS" : "Israel", 
    "INR" : "Bhutan, India", 
    "IQD" : "Iraq", 
    "IRR" : "Iran", 
    "ISK" : "Iceland", 
    "JMD" : "Jamaica", 
    "JOD" : "Jordan", 
    "JPY" : "Japan", 
    "KES" : "Kenya", 
    "KGS" : "Kyrgyzstan", 
    "KHR" : "Cambodia", 
    "KMF" : "Comoros", 
    "KPW" : "North Korea", 
    "KRW" : "South Korea", 
    "KWD" : "Kuwait", 
    "KYD" : "Cayman Islands", 
    "KZT" : "Kazakhstan", 
    "LAK" : "Laos", 
    "LBP" : "Lebanon", 
    "LKR" : "Sri Lanka", 
    "LRD" : "Liberia", 
    "LSL" : "Lesotho", 
    "LTL" : "Lithuania", 
    "LVL" : "Latvia", 
    "LYD" : "Libya", 
    "MAD" : "Morocco, Western Sahara", 
    "MDL" : "Moldova", 
    "MGA" : "Madagascar", 
    "MKD" : "Former Yugoslav Republic of Macedonia", 
    "MMK" : "Myanmar", 
    "MNT" : "Mongolia", 
    "MOP" : "Macau Special Administrative Region", 
    "MRO" : "Mauritania", 
    "MTL" : "Malta", 
    "MUR" : "Mauritius", 
    "MVR" : "Maldives", 
    "MWK" : "Malawi", 
    "MXN" : "Mexico", 
    "MXV" : "Mexico", 
    "MYR" : "Malaysia", 
    "MZN" : "Mozambique", 
    "NAD" : "Namibia", 
    "NGN" : "Nigeria", 
    "NIO" : "Nicaragua", 
    "NOK" : "Norway", 
    "NPR" : "Nepal", 
    "NZD" : "Cook Islands, New Zealand, Niue, Pitcairn, Tokelau", 
    "OMR" : "Oman", 
    "PAB" : "Panama", 
    "PEN" : "Peru", 
    "PGK" : "Papua New Guinea", 
    "PHP" : "Philippines", 
    "PKR" : "Pakistan", 
    "PLN" : "Poland", 
    "PYG" : "Paraguay", 
    "QAR" : "Qatar", 
    "RON" : "Romania", 
    "RSD" : "Serbia", 
    "RUB" : "Russia, Abkhazia, South Ossetia", 
    "RWF" : "Rwanda", 
    "SAR" : "Saudi Arabia", 
    "SBD" : "Solomon Islands", 
    "SCR" : "Seychelles", 
    "SDG" : "Sudan", 
    "SEK" : "Sweden", 
    "SGD" : "Singapore", 
    "SHP" : "Saint Helena", 
    "SKK" : "Slovakia", 
    "SLL" : "Sierra Leone", 
    "SOS" : "Somalia", 
    "SRD" : "Suriname", 
    "STD" : "São Tomé and Príncipe", 
    "SYP" : "Syria", 
    "SZL" : "Swaziland", 
    "THB" : "Thailand", 
    "TJS" : "Tajikistan", 
    "TMM" : "Turkmenistan", 
    "TND" : "Tunisia", 
    "TOP" : "Tonga", 
    "TRY" : "Turkey", 
    "TTD" : "Trinidad and Tobago", 
    "TWD" : "Taiwan and other islands that are under the effective control of the Republic of China (ROC)", 
    "TZS" : "Tanzania", 
    "UAH" : "Ukraine", 
    "UGX" : "Uganda", 
    "USD" : "American Samoa, British Indian Ocean Territory, Ecuador, El Salvador, Guam, Haiti, Marshall Islands, Micronesia, Northern Mariana Islands, Palau, Panama, Puerto Rico, East Timor, Turks and Caicos Islands, United States, Virgin Islands", 
    "USN" : "United States", 
    "USS" : "United States", 
    "UYU" : "Uruguay", 
    "UZS" : "Uzbekistan", 
    "VEB" : "Venezuela", 
    "VND" : "Vietnam", 
    "VUV" : "Vanuatu", 
    "WST" : "Samoa", 
    "XAF" : "Cameroon, Central African Republic, Congo, Chad, Equatorial Guinea, Gabon", 
    "XAG" : "", 
    "XAU" : "", 
    "XBA" : "", 
    "XBB" : "", 
    "XBC" : "", 
    "XBD" : "", 
    "XCD" : "Anguilla, Antigua and Barbuda, Dominica, Grenada, Montserrat, Saint Kitts and Nevis, Saint Lucia, Saint Vincent and the Grenadines", 
    "XDR" : "International Monetary Fund", 
    "XFO" : "Bank for International Settlements", 
    "XFU" : "International Union of Railways", 
    "XOF" : "Benin, Burkina Faso, Côte d'Ivoire, Guinea-Bissau, Mali, Niger, Senegal, Togo", 
    "XPD" : "", 
    "XPF" : "French Polynesia, New Caledonia, Wallis and Futuna", 
    "XPT" : "", 
    "XTS" : "", 
    "XXX" : "", 
    "YER" : "Yemen", 
    "ZAR" : "South Africa", 
    "ZMK" : "Zambia", 
    "ZWD" : "Zimbabwe"] 

и некоторые функции для анализа Dict:

func countryBy(code : String) -> String? { 
    return codeToCountry[code] 
} 

countryBy(code: "ZWD") 
countryBy(code: "") 
countryBy(code: "asda") 

Вот это некоторые рабочий пример:

https://iswift.org/playground?blvcE5

+0

Спасибо за отличный ответ –

+0

Помните, что некоторые значения для кода пустые, например, 'XTS', а некоторые значения очень длинные и содержат несколько стран, например' XOF' – kamwysoc

+0

для «ZWD», он вернет «Необязательный (« Зимбабве ») «и вам нужно развернуть эту ценность, чтобы получить« Зимбабве », – kamwysoc

3

Альтернативный вариант, используя Sw IFT 3 Locale класс данных:

struct CurrencyToRegionMapper { 

    static let locales = Locale.availableIdentifiers.map(Locale.init) 

    static func locales(currencyCode: String) -> Set<Locale> { 
     let localesWithCode = self.locales.filter { locale in 
      locale.currencyCode == currencyCode 
     } 
     return Set(localesWithCode) 
    } 

    static func locales(currencySymbol: String) -> Set<Locale> { 
     let localesWithSymbol = self.locales.filter { locale in 
      locale.currencySymbol == currencySymbol 
     } 
     return Set(localesWithSymbol) 
    } 

    static func regionNames(currencyCode: String, forLocale locale: Locale = Locale.autoupdatingCurrent) -> Set<String> { 
     let locale = Locale(identifier: locale.identifier) // .current and .autoupdatingCurrent doesn't work without this hack for some reason 
     let localesForCode = self.locales(currencyCode: currencyCode) 
     let names: [String] = localesForCode.flatMap { loc in 
      if let regionCode = loc.regionCode { 
       return locale.localizedString(forRegionCode: regionCode) 
      } else { 
       return locale.localizedString(forIdentifier: loc.identifier) 
      } 
     } 
     return Set(names) 
    } 

    static func regionNames(currencySymbol: String, forLocale locale: Locale = Locale.autoupdatingCurrent) -> Set<String> { 
     let locale = Locale(identifier: locale.identifier) // .current and .autoupdatingCurrent doesn't work without this hack for some reason 
     let localesForSymbol = self.locales(currencySymbol: currencySymbol) 
     let names: [String] = localesForSymbol.flatMap { loc in 
      if let regionCode = loc.regionCode { 
       return locale.localizedString(forRegionCode: regionCode) 
      } else { 
       return locale.localizedString(forIdentifier: loc.identifier) 
      } 
     } 
     return Set(names) 
    } 

} 

Использование:

CurrencyToRegionMapper.locales(currencyCode: "EUR") // Returns set of locales, where currency is Euro 
CurrencyToRegionMapper.locales(currencySymbol: "$") // Returns set of locales, where currency symbol is $ 

CurrencyToRegionMapper.regionNames(currencyCode: "GBP", forLocale: Locale(identifier: "en_POSIX")) // Returns set of regions(countries) names which use british pound in POSIX locale: ["United Kingdom", "Guernsey", "Jersey", "Isle of Man"] 
CurrencyToRegionMapper.regionNames(currencySymbol: "¥", forLocale: Locale(identifier: "fi_FI")) // Returns set of regions which use currency with symbol ¥ in Finnish locale: ["Kiina", "Japani"] 
Смежные вопросы