web-dev-qa-db-fra.com

NSLocale Swift 3

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?

13
I make my mark

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$
19
Martin R
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.

5
keithbhunter

Pour Swift 3

locale.regionCode

regionsCode est similaire à displayName

0
Den Jo

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")
0
Ridho Octanio