NSLocale Swift 3
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.
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$
I use extension for Locale this is my code
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))!
}
}
and this for use
var priceCount = 100000
priceCount.asLocaleCurrency(identifier: "id_ID")