使用NSLocale根据国家/地区代码或国家/地区名称获取货币符号

Rus*_*abh 2 currency objective-c ios nslocale

我想使用NSLocale根据国家名称或国家代码显示货币符号我有所有国家/地区名称列表.假设我选择了美国然后返回$ Currency

代码:

 NSLocale *locale = [NSLocale currentLocale];
 NSString *countryCode = [locale objectForKey: NSLocaleCountryCode];
 NSString *country = [locale displayNameForKey: NSLocaleCurrencyCode value: countryCode];
Run Code Online (Sandbox Code Playgroud)

Leo*_*bus 12

Xcode 10•Swift 4.2或更高版本

extension Locale {
    static let currency: [String: (code: String?, symbol: String?)] = Locale.isoRegionCodes.reduce(into: [:]) {
        let locale = Locale(identifier: Locale.identifier(fromComponents: [NSLocale.Key.countryCode.rawValue: $1]))
        $0[$1] = (locale.currencyCode, locale.currencySymbol)
    }
}
Run Code Online (Sandbox Code Playgroud)
Locale.currency["US"]   // (code "USD", symbol "US$")
Locale.currency["BR"]   // (code "BRL", symbol "R$")
Locale.currency["GB"]   // (code "GBP", symbol "£")
Locale.currency["PT"]   // (code "EUR", symbol "€")
Run Code Online (Sandbox Code Playgroud)

对于较旧的Swift语法,请查看帖子编辑历史记录

  • 完美解决方案 (2认同)

rma*_*ddy 6

您可以使用以下代码构建自己的国家/地区代码列表和该国家/地区的货币符号:

目标-C:

- (void)listCountriesAndCurrencies {
    NSArray<NSString *> *localeIds = [NSLocale availableLocaleIdentifiers];
    NSMutableDictionary<NSString *, NSString *> *countryCurrency = [NSMutableDictionary dictionary];
    for (NSString *localeId in localeIds) {
        NSLocale *locale = [NSLocale localeWithLocaleIdentifier:localeId];

        NSString *country = [locale objectForKey: NSLocaleCountryCode];
        if (country && country.length == 2) {
            NSString *currency = [locale objectForKey: NSLocaleCurrencySymbol];
            countryCurrency[country] = currency;
        }
    }

    NSArray<NSString *> *sorted = [countryCurrency.allKeys sortedArrayUsingSelector:@selector(compare:)];
    for (NSString *country in sorted) {
        NSString *currency = countryCurrency[country];

        NSLog(@"country: %@, currency: %@", country, currency);
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码以所有语言环境 ID 的列表开头。从那里它创建每个关联的NSLocale. 对于每个语言环境,提取国家代码和货币符号。这些用于构建国家代码和货币符号的字典,然后将其打印出来。

这是转换为 Swift 3 的相同代码:

func listCountriesAndCurrencies() {
    let localeIds = Locale.availableIdentifiers
    var countryCurrency = [String: String]()
    for localeId in localeIds {
        let locale = Locale(identifier: localeId)

        if let country = locale.regionCode, country.characters.count == 2 {
            if let currency = locale.currencySymbol {
                countryCurrency[country] = currency
            }
        }
    }

    let sorted = countryCurrency.keys.sorted()
    for country in sorted {
        let currency = countryCurrency[country]!

        print("country: \(country), currency: \(currency)")
    }
}
Run Code Online (Sandbox Code Playgroud)

在模拟的 iOS 10 设备上运行时,会产生以下列表:

国家:AD,货币:€
国家:AE,货币:?.?.?
国家:AF,货币:?
国家:AG,货币:$
国家:AI,货币:$
国家:AL,货币:Lekë
国家:AM,货币:?
国家:AO,货币:Kz
国家:AR,货币:$
国家:AS,货币:$
国家:AT,货币:€
国家:AU,货币:$
国家:AW,货币:Afl。
国家:AX,货币:€
国家:AZ,货币:?
国家:BA,货币:KM
国家:BB,货币:$
国家:BD,货币:?
国家:比利时,货币:€
国家:BF,货币:CFA
国家:BG,货币:??。
国家:BH,货币:?.?.?
国家:BI,货币:FBu
国家:BJ,货币:CFA
国家:BL,货币:€
国家:BM,货币:$
国家:BN,货币:$
国家:BO,货币:Bs
国家:BQ,货币:$
国家:巴西雷亚尔,货币:雷亚尔
国家:BS,货币:$
国家:BT,货币:Nu。
国家:BW,货币:P
国家:BY,货币:?。
国家:BZ,货币:$
国家:CA,货币:$
国家:CC,货币:$
国家:CD,货币:FC
国家:CF,货币:FCFA
国家:CG,货币:FCFA
国家:CH,货币:CHF
国家:CI,货币:CFA
国家:CK,货币:$
国家:CL,货币:$
国家:CM,货币:FCFA
国家:CN,货币:¥
国家:CO,货币:$
国家:CR,货币:?
国家:CU,货币:$
国家:简历,货币:?
国家:CW,货币:NAf。
国家:CX,货币:$
国家:CY,货币:€
国家:CZ,货币:K?
国家:DE,货币:€
国家:DG,货币:美元
国家:DJ,货币:Fdj
国家:DK,货币:kr。
国家:DM,货币:$
国家:DO,货币:RD$
国家:DZ,货币:?.?.?
国家:EA,货币:€
国家:EC,货币:$
国家:EE,货币:€
国家:EG,货币:?.?.?
国家:EH,货币:?.?.?
国家:ER,货币:Nfk
国家:ES,货币:€
国家:ET,货币:Br
国家:FI,货币:€
国家:FJ,货币:$
国家:FK,货币:£
国家:FM,货币:美元
国家:FO,货币:kr
国家:FR,货币:€
国家:GA,货币:FCFA
国家:GB,货币:£
国家:GD,货币:$
国家:GE,货币:?
国家:GF,货币:€
国家:GG,货币:£
国家:GH,货币:GH?
国家:GI,货币:£
国家:GL,货币:kr。
国家:GM,货币:D
国家:GN,货币:FG
国家:GP,货币:€
国家:GQ,货币:FCFA
国家:GR,货币:€
国家:GT,货币:Q
国家:GU,货币:$
国家:GW,货币:CFA
国家:GY,货币:$
国家:港币,货币:港币
国家:HN,货币:L
国家:HR,货币:HRK
国家:HT,货币:G
国家:HU,货币:HUF
国家:IC,货币:€
国家:身份证,货币:印尼盾
国家:IE,货币:€
国家:伊利诺伊州,货币:?
国家:IM,货币:£
国家:IN,货币:?
国家:IO,货币:美元
国家:IQ,货币:IQD
国家:IR,货币:IRR
国家:IS,货币:ISK
国家:IT,货币:€
国家:JE,货币:£
国家:JM,货币:$
国家:JO,货币:?.?.?
国家:JP,货币:¥
国家:KE,货币:Ksh
国家:公斤,货币:???
国家:KH,货币:?
国家:KI,货币:$
国家:KM,货币:CF
国家:KN,货币:$
国家:KP,货币:KPW
国家:韩元,货币:?
国家:KW,货币:?.?.?
国家:KY,货币:$
国家:KZ,货币:?
国家:洛杉矶,货币:?
国家:LB,货币:?.?.?
国家:LC,货币:$
国家:LI,货币:瑞士法郎
国家:LK,货币:卢比。
国家:LR,货币:$
国家:LS,货币:R
国家:LT,货币:€
国家:LU,货币:€
国家:LV,货币:€
国家:LY,货币:?.?.?
国家:MA,货币:MAD
国家:MC,货币:€
国家:MD,货币:L
国家:ME,货币:€
国家:MF,货币:€
国家:MG,货币:Ar
国家:MH,货币:$
国家:MK,货币:den
国家:ML,货币:CFA
国家:MM,货币:K
国家:MN,货币:?
国家:MO,货币:MOP$
国家:MP,货币:$
国家:MQ,货币:€
国家:MR,货币:UM
国家:MS,货币:$
国家:MT,货币:€
国家:MU,货币:卢比
国家:MV,货币:MVR
国家:MW,货币:MK
国家/地区:MX,货币:$
国家:MY,货币:RM
国家:MZ,货币:MTn
国家/地区:NA,货币:$
国家:NC,货币:FCFP
国家:NE,货币:CFA
国家:NF,货币:$
国家:NG,货币:?
国家:NI,货币:加元
国家:荷兰,货币:€
国家:NO,货币:kr
国家:NP,货币:????
国家/地区:NR,货币:$
国家:NU,货币:$
国家:新西兰,货币:$
国家:OM,货币:?.?.?
国家:PA,货币:B/。
国家:PE,货币:S/。
国家:PF,货币:FCFP
国家:PG,货币:K
国家:PH,货币:?
国家:PK,货币:卢比
国家:PL,货币:PLN
国家:下午,货币:€
国家:PN,货币:$
国家:PR,货币:$
国家:PS,货币:?
国家:PT,货币:€
国家:PW,货币:美元
国家:PY,货币:Gs。
国家:QA,货币:?.?.?
国家:RE,货币:€
国家:RO,货币:RON
国家:RS,货币:RSD
国家:RU,货币:RUB
国家:RW,货币:RF
国家:SA,货币:?.?.?
国家:SB,货币:$
国家:SC,货币:SR
国家:SD,货币:SDG
国家:SE,货币:kr
国家:SG,货币:$
国家:SH,货币:£
国家:SI,货币:€
国家:SJ,货币:kr
国家:SK,货币:€
国家:SL,货币:Le
国家:SM,货币:€
国家:SN,货币:CFA
国家:SO,货币:S
国家:SR,货币:$
国家:SS,货币:£
国家:ST,货币:Db
国家:SV,货币:$
国家:SX,货币:NAf。
国家:SY,货币:?.?.?
国家:SZ,货币:E
国家:TC,货币:美元
国家:TD,货币:FCFA
国家:TG,货币:CFA
国家:泰铢,货币:泰铢
国家:TJ,货币:???
国家:TK,货币:$
国家/地区:TL,货币:美元
国家:TM,货币:TMT
国家:TN,货币:?.?.?
国家:TO,货币:T$
国家:TR,货币:TRY
国家:TT,货币:$
国家:电视,货币:$
国家:TW,货币:NT$
国家:TZ,货币:TSh
国家:UA,货币:?
国家:UG,货币:USh
国家:UM,货币:$
国家:美国,货币:$
国家:UY,货币:$
国家:UZ,货币:so?m
国家:VC,货币:$
国家:VE,货币:Bs。
国家:VG,货币:美元
国家:VI,货币:$
国家:越南,货币:?
国家:VU,货币:VT
国家:WF,货币:FCFP
国家:WS,货币:WS$
国家:XK,货币:€
国家:YE,货币:?.?.?
国家:YT,货币:€
国家:ZA,货币:R
国家:ZM,货币:K
国家:ZW,货币:美元