How do I get the currency symbol in 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()
}
}
I know NSLocale got renamed to Locale, but displayNameForKey got removed and I only seem to be able to use localizedString(forCurrencyCode: self.code) to generate the name of the currency in the current locale without being able to get its symbol. I'm looking for a way to get a foreign currency symbol in a current locale.
Or am I overlooking something?
NSLocale
was not renamed, it still exists. Locale
is a
new type introduced in Swift 3 as a value type wrapper
(compare SE-0069 Mutability and Foundation Value Types).
Apparently Locale
has no displayName(forKey:value:)
method,
but you can always convert it to its Foundation counterpart
NSLocale
:
public var symbol: String {
return (Locale.current as NSLocale).displayName(forKey: .currencySymbol, value: code) ?? ""
}
More examples:
// 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$
Locale.current.currencySymbol
The new Locale
type moved most of the stringly typed properties into real properties. See the developer pages for the full list of properties.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With