如何在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)在当前语言环境中生成货币名称,而无法获取其符号。我正在寻找一种在当前语言环境中获取外币符号的方法。
还是我忽略了什么?
NSLocale没有重命名,它仍然存在。Locale是Swift 3中引入的一种新类型,用作值类型包装器(比较SE-0069可变性和基础值类型)。
NSLocale
Locale
显然Locale没有displayName(forKey:value:)方法,但是您始终可以将其转换为Foundation的对应方法 NSLocale:
displayName(forKey:value:)
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$