2016-09-15 5 views
11

Как получить символ валюты в Swift 3?NSLocale 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), чтобы сгенерировать название валюты в текущей локали, не будучи в состоянии чтобы получить свой символ. Я ищу способ получить символ иностранной валюты в текущем регионе.

Или я что-то пропускаю?

ответ

17

NSLocale не был переименован, он все еще существует. Locale является новый тип введено в Swift 3 как тип ценности обертка (сравнить SE-0069 Mutability and Foundation Value Types).

Видимо Locale не displayName(forKey:value:) метод, , но вы всегда можете преобразовать его в аналог Фонда 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$ 
+0

Спасибо, что это работает и выглядит намного опрятно, чем решение, которое я сделал, используя глобальную функцию Objective-C. –

5
Locale.current.currencySymbol 

Новый Locale тип переехал большинство строгих типизированных свойств в реальные свойства , Полный список свойств приведен в разделе developer pages.

+3

Это работает только для символа валюты текущего языкового стандарта. –

+0

Я искал символ иностранной валюты в текущем регионе. Не для кода иностранной валюты в иностранном регионе. –

0

Я использую расширение для 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") 
0

Для быстрой 3

locale.regionCode 

regionsCode похож на DISPLAYNAME

+0

Это не будет печатать символ валюты ... –