macos - 使用swift从货币代码中获取货币符号

标签 macos swift cocoa currency

如何使用 Swift (macOS) 获取相应货币代码的货币符号。

示例:

  • 欧元 = 1.00 欧元
  • 美元 = 1.00 美元
  • 加元 = 1.00 美元
  • 英镑 = 1.00 英镑

我的代码:

var formatter = NSNumberFormatter()
formatter.currencySymbol = getSymbol(currencyCode)
formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
let number = NSNumber(double: (amount as NSString).doubleValue)
let amountWithSymbol = formatter.stringFromNumber(number)!

getSymbol(_ currencyCode: String) -> String

或者..有更好的方法吗?

最佳答案

有点晚了,但这是我用来获取货币符号的 $ 而不是 US$ 等的解决方案。

/*
 * Bear in mind not every currency have a corresponding symbol. 
 *
 * EXAMPLE TABLE
 *
 * currency code | Country & Currency | Currency Symbol
 *
 *      BGN      |   Bulgarian lev    |      лв   
 *      HRK      |   Croatian Kuna    |      kn
 *      CZK      |   Czech  Koruna    |      Kč
 *      EUR      |       EU Euro      |      €
 *      USD      |     US Dollar      |      $
 *      GBP      |   British Pound    |      £
 */

func getSymbol(forCurrencyCode code: String) -> String? {
   let locale = NSLocale(localeIdentifier: code)
   return locale.displayNameForKey(NSLocaleCurrencySymbol, value: code)
}

基本上,这会根据您的货币代码创建 NSLocale 并获取货币的显示属性。如果结果与货币代码匹配,例如 SEK,它将通过从货币代码中删除最后一个字符并附加“_en”以形成 SE_en 来创建新的国家/地区特定区域设置.然后它将再次尝试获取货币符号。

swift 3 和 4

func getSymbol(forCurrencyCode code: String) -> String? {
    let locale = NSLocale(localeIdentifier: code)
    if locale.displayName(forKey: .currencySymbol, value: code) == code {
        let newlocale = NSLocale(localeIdentifier: code.dropLast() + "_en")
        return newlocale.displayName(forKey: .currencySymbol, value: code)
    }
    return locale.displayName(forKey: .currencySymbol, value: code)
}

关于macos - 使用swift从货币代码中获取货币符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31999748/

相关文章:

objective-c - 如何在 NSCountedSet 中将对象计数设置为零(或某个值)?

macos - 如何使用GCD删除已调度的 block

ios - 从地址簿中计算个人资料中的电子邮件地址

ios - 单击 SpriteKit 叠加标签时如何在 SceneKit 中切换场景?

ios - 使用 "init"或 "didmove"的正确方法是什么?

objective-c - OS X如何申请 "clean"内存?

cocoa - NSWindow 纹理渐变填充怪异

macos - 在基于文档的应用程序中,当用户意外按下 cmd+w 而不是 cmd+s 时,如何防止数据丢失?

c - 如何在 macOS 上将 dylib 静态链接到我的程序?

xcode - 如何更新 Xcode?