NSLocale Swift 3
Как мне получить символ валюты в 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), чтобы сгенерировать имя валюты в текущем регионе, не имея возможности получить свой символ, Я ищу способ получить символ иностранной валюты в текущем регионе.
Или я что-то пропускаю?
Ответы
Ответ 1
NSLocale
не был переименован, он все еще существует. Locale
является
новый тип, введенный в Swift 3 как оболочка типа значения
(сравните SE-0069 Mutability и 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$
Ответ 2
Locale.current.currencySymbol
Новый тип Locale
переместил большинство строковых типизированных свойств в реальные свойства. Полный список свойств можно найти на страницах .
Ответ 3
Я использую расширение для 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")
Ответ 4
Для быстрого 3
locale.regionCode
regionsCode похож на displayName