Swift:从货币代码获取货币符号不起作用

Gau*_*ole 1 ios swift

我想要货币代码中的货币符号。\n例如) 欧元 -> \xe2\x82\xac、美元 -> $、瑞典克朗 -> kr、丹麦克朗 -> kr

\n\n

我正在使用下面的代码来获取货币符号。

\n\n
func getSymbolForCurrencyCode(code: String) -> String? {\n   let locale = NSLocale(localeIdentifier: code)\n   return locale.displayName(forKey: NSLocale.Key.currencySymbol, value: code)\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它会为瑞典克朗返回瑞典克朗,为丹麦克朗返回丹麦克朗,它应该返回 kr。\n对于美元、英镑、欧元,其工作正常。

\n\n

可能是什么问题?

\n

Vla*_*bir 5

它无需使用NSLocale类即可工作(Swift 3/4):

func getSymbolForCurrencyCode(code: String) -> String? {
    let result = Locale.availableIdentifiers.map { Locale(identifier: $0) }.first { $0.currencyCode == code }
    return result?.currencySymbol
}
getSymbolForCurrencyCode(code: "GBP")
Run Code Online (Sandbox Code Playgroud)

  • 这将不必要地循环所有可用的标识符。您可以只获取第一个匹配项并从中返回货币代码。`guard letidentifier = Locale.availableIdentifiers.first(where: { Locale(identifier: $0).currencyCode == code }) else { return nil } return Locale(identifier:identifier).currencySymbol` (3认同)