NSLocale Swift 3

14

如何在Swift 3中获取货币符号?

public class Currency: NSObject {
    public let name: String
    public let code: String
    public var symbol: String {
        return NSLocale.currentLocale().displayNameForKey(NSLocaleCurrencySymbol, value: code) ?? ""
    }

    // MARK: NSObject

    public init(name: String, code: String) {
        self.name = name
        self.code = code
        super.init()
    }
}

我知道NSLocale已经被重命名为Locale,但displayNameForKey已经被删除了,而我似乎只能使用localizedString(forCurrencyCode:self.code)在当前语言环境中生成货币名称而无法获取其符号。我正在寻找一种方法以获取当前语言环境中外币的符号。

或者我有什么疏忽吗?

5个回答

24

NSLocale没有更名,仍然存在。在Swift 3中引入了一个名为Locale的新类型,作为值类型包装器(参见SE-0069 Mutability and Foundation Value Types)。

显然Locale没有displayName(forKey:value:)方法,但您可以将其转换为其Foundation对应项NSLocale

public var symbol: String {
    return (Locale.current as NSLocale).displayName(forKey: .currencySymbol, value: code) ?? ""
}

更多例子:

// Dollar symbol in the german locale:
let s1 = (Locale(identifier:"de") as NSLocale).displayName(forKey: .currencySymbol, value: "USD")!
print(s1) // $

// Dollar symbol in the italian locale:
let s2 = (Locale(identifier:"it") as NSLocale).displayName(forKey: .currencySymbol, value: "USD")!
print(s2) // US$

谢谢,这个方法的效果和外观都比我使用全局Objective-C函数的解决方案要好得多。 - I make my mark

5
Locale.current.currencySymbol

新的Locale类型将大部分字符串类型的属性转换为真实属性。请参阅开发人员页面获取完整的属性列表。

4
仅适用于当前区域设置的货币符号。 - I make my mark
我正在查找当前语言环境中的外币符号,而不是在外语环境中的外币代码。 - I make my mark

2

我使用Locale扩展,以下是我的代码

extension Int {
func asLocaleCurrency(identifier: String) -> String {
    let formatter = NumberFormatter()
    formatter.numberStyle = .currency
    formatter.locale = Locale(identifier: identifier)
    return formatter.string(from: NSNumber(integerLiteral: self))!
}
}

并且这是用于使用的

var priceCount = 100000
priceCount.asLocaleCurrency(identifier: "id_ID")

0

有一个函数可以直接获取货币代码的本地化名称,无需转换为NSLocale

Locale(identifier: "en-GB").localizedString(forCurrencyCode: "USD") // "Us Dollar"
Locale(identifier: "pl-PL").localizedString(forCurrencyCode: "USD") // "Dolar Amerykański"

0

对于 Swift 3

locale.regionCode

regionsCode类似于displayName


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接