Comment obtenir le symbole monétaire dans 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()
}
}
Je sais que NSLocale a été renommé en paramètres régionaux, mais displayNameForKey a été supprimé et il semble que je ne puisse utiliser que localizedString (forCurrencyCode: self.code) pour générer le nom de la devise dans l'environnement local actuel sans pouvoir en obtenir le symbole. Je cherche un moyen d'obtenir un symbole de devise étrangère dans les paramètres régionaux actuels.
Ou est-ce que je néglige quelque chose?
NSLocale
n'a pas été renommé, il existe toujours. Locale
est un typenouveau introduit dans Swift 3 sous la forme d'un wrapper de type valeur (comparez SE-0069 Types de mutabilité et de valeur fondamentale ).
Apparemment, Locale
n'a pas de méthode displayName(forKey:value:)
, Mais vous pouvez toujours le convertir en son équivalent Foundation NSLocale
:
public var symbol: String {
return (Locale.current as NSLocale).displayName(forKey: .currencySymbol, value: code) ?? ""
}
Plus d'exemples:
// 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
Le nouveau type Locale
a déplacé la plupart des propriétés fortement typées en propriétés réelles. Voir les pages developer pour la liste complète des propriétés.
Pour Swift 3
locale.regionCode
regionsCode est similaire à displayName
J'utilise l'extension pour Locale C'est mon 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))!
}
}
et ceci pour l'utilisation
var priceCount = 100000
priceCount.asLocaleCurrency(identifier: "id_ID")