NSLocale Swift 3
NSLocale Swift 3
如何获取Swift3中的货币符号?
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 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$
Locale.current.currencySymbol
新的 Locale
类型将大部分字符串类型的属性移到了实际属性中。有关完整的属性列表,请参阅 developer pages。
我使用区域设置的扩展
这是我的代码
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")
对于swift 3
locale.regionCode
regionsCode 类似于 displayName
Locale
中有一个函数可以直接获取货币代码的本地化名称,无需转换为NSLocale
。
Locale(identifier: "en-GB").localizedString(forCurrencyCode: "USD") // "Us Dollar"
Locale(identifier: "pl-PL").localizedString(forCurrencyCode: "USD") // "Dolar Amerykański"
如何获取Swift3中的货币符号?
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 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$
Locale.current.currencySymbol
新的 Locale
类型将大部分字符串类型的属性移到了实际属性中。有关完整的属性列表,请参阅 developer pages。
我使用区域设置的扩展 这是我的代码
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")
对于swift 3
locale.regionCode
regionsCode 类似于 displayName
Locale
中有一个函数可以直接获取货币代码的本地化名称,无需转换为NSLocale
。
Locale(identifier: "en-GB").localizedString(forCurrencyCode: "USD") // "Us Dollar"
Locale(identifier: "pl-PL").localizedString(forCurrencyCode: "USD") // "Dolar Amerykański"