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