如何让 iOS 中的用户选择自己的货币
How to give users in iOS the choice to choose their own currency
我有一个 iOS 应用程序,它不断收到用户的反馈,他们希望能够设置自己的货币类型。现在我正在使用 currencyFormatter.locale
获取用户本地货币并将其用于应用程序。我的想法是,我可以在应用程序的设置部分创建一个 tableView,让用户选择他们想要使用的货币。
我会在那里保存所需的货币,然后使用它来代替现在显示的区域设置。
要完成这项工作,我需要提取哪些数据?这些数据会由 Apple 提供吗?我想我需要 currency codes 但这是要显示的供用户选择的正确数据吗?
我找到了这个repo,看起来这很有用,但它似乎不再是supported/updated了。
我只是需要一些帮助,指出正确的方向,因为我的研究没有取得任何进展。
编辑
我找到了一个应用程序,我认为它正在做与我想要实现的事情类似的事情。
您应该改为设置格式化程序的 currencySymbol
:
let currencyFormatter = NumberFormatter()
currencyFormatter.numberStyle = .currency
currencyFormatter.currencySymbol = "¥"
currencyFormatter.string(from: 123) // "¥123.00"
您可以为用户提供 UITextField
让他们输入任意字符串作为货币符号。
如果您希望用户从列表中选择语言环境并使用该语言环境的货币符号,也可以使用 Locale
实例的 currencySymbol
属性。
区域设置和货币说明:
货币和区域设置没有一一对应关系。一种货币可以在多个地区使用,但一个地区通常有一种货币对应,如Locale
中有一个currencySymbol
。 locale 用于决定货币符号的位置。例如,在法国,货币符号将放在末尾。这意味着如果您只有一个货币符号,则在字符串中没有 "right" 位置,因为您没有指定语言环境。因此,如果您希望货币符号位于用户期望的位置,请向用户询问他们想要的区域设置,而不是货币符号。如果您不关心货币符号是否显示在用户期望的位置,则以用户当前的语言环境显示。
你说得对,你应该制作一个列表屏幕,让用户从中选择他们想要的货币。保存该货币并使用它代替语言环境。您可以使用此代码获取货币名称和货币符号列表。
NSLocale *locale = [NSLocale currentLocale];
NSArray *currencyCodesArray = [NSLocale ISOCurrencyCodes];
NSMutableDictionary *currenciesDict = [NSMutableDictionary new];
for (NSString *currencyCode in currencyCodesArray) {
NSString *currencyName = [locale displayNameForKey:NSLocaleCurrencyCode value:currencyCode];
NSString *currencySymbol = [locale displayNameForKey:NSLocaleCurrencySymbol value:currencyCode];
if (currencyName != nil && currencySymbol != nil) {
[currenciesDict setValue:currencySymbol forKey:currencyName];
}
}
return currenciesDict;
编辑
这是 swift 中的相同代码。
let locale = NSLocale.current as NSLocale
let currencyCodesArray = NSLocale.isoCurrencyCodes
var currenciesDict = [String: String]()
for currencyCode in currencyCodesArray {
let currencyName = locale.displayName(forKey: NSLocale.Key.currencyCode, value : currencyCode)
let currencySymbol = locale.displayName(forKey: NSLocale.Key.currencySymbol, value : currencyCode)
if let currencySymbol = currencySymbol, let currencyName = currencyName {
currenciesDict[currencySymbol] = currencyName
}
}
print(currenciesDict)
编辑 2
与自定义模型相同的代码。
这就是您的自定义模型的样子。
class CurrencyModel {
var currencyName = ""
var currencyCode = ""
}
这就是代码的样子。
let locale = NSLocale.current as NSLocale
let currencyCodesArray = NSLocale.isoCurrencyCodes
var currencies = [CurrencyModel]()
for currencyCode in currencyCodesArray {
let currencyName = locale.displayName(forKey:
NSLocale.Key.currencyCode, value : currencyCode)
let currencySymbol = locale.displayName(forKey:NSLocale.Key.currencySymbol, value : currencyCode)
if let currencySymbol = currencySymbol, let currencyName = currencyName {
let currencyModel = CurrencyModel()
currencyModel.currencyName = currencyName
currencyModel.currencyCode = currencyCode
currencies.append(currencyModel)
}
}
print(currencies)
我有一个 iOS 应用程序,它不断收到用户的反馈,他们希望能够设置自己的货币类型。现在我正在使用 currencyFormatter.locale
获取用户本地货币并将其用于应用程序。我的想法是,我可以在应用程序的设置部分创建一个 tableView,让用户选择他们想要使用的货币。
我会在那里保存所需的货币,然后使用它来代替现在显示的区域设置。
要完成这项工作,我需要提取哪些数据?这些数据会由 Apple 提供吗?我想我需要 currency codes 但这是要显示的供用户选择的正确数据吗?
我找到了这个repo,看起来这很有用,但它似乎不再是supported/updated了。
我只是需要一些帮助,指出正确的方向,因为我的研究没有取得任何进展。
编辑
我找到了一个应用程序,我认为它正在做与我想要实现的事情类似的事情。
您应该改为设置格式化程序的 currencySymbol
:
let currencyFormatter = NumberFormatter()
currencyFormatter.numberStyle = .currency
currencyFormatter.currencySymbol = "¥"
currencyFormatter.string(from: 123) // "¥123.00"
您可以为用户提供 UITextField
让他们输入任意字符串作为货币符号。
如果您希望用户从列表中选择语言环境并使用该语言环境的货币符号,也可以使用 Locale
实例的 currencySymbol
属性。
区域设置和货币说明:
货币和区域设置没有一一对应关系。一种货币可以在多个地区使用,但一个地区通常有一种货币对应,如Locale
中有一个currencySymbol
。 locale 用于决定货币符号的位置。例如,在法国,货币符号将放在末尾。这意味着如果您只有一个货币符号,则在字符串中没有 "right" 位置,因为您没有指定语言环境。因此,如果您希望货币符号位于用户期望的位置,请向用户询问他们想要的区域设置,而不是货币符号。如果您不关心货币符号是否显示在用户期望的位置,则以用户当前的语言环境显示。
你说得对,你应该制作一个列表屏幕,让用户从中选择他们想要的货币。保存该货币并使用它代替语言环境。您可以使用此代码获取货币名称和货币符号列表。
NSLocale *locale = [NSLocale currentLocale];
NSArray *currencyCodesArray = [NSLocale ISOCurrencyCodes];
NSMutableDictionary *currenciesDict = [NSMutableDictionary new];
for (NSString *currencyCode in currencyCodesArray) {
NSString *currencyName = [locale displayNameForKey:NSLocaleCurrencyCode value:currencyCode];
NSString *currencySymbol = [locale displayNameForKey:NSLocaleCurrencySymbol value:currencyCode];
if (currencyName != nil && currencySymbol != nil) {
[currenciesDict setValue:currencySymbol forKey:currencyName];
}
}
return currenciesDict;
编辑
这是 swift 中的相同代码。
let locale = NSLocale.current as NSLocale
let currencyCodesArray = NSLocale.isoCurrencyCodes
var currenciesDict = [String: String]()
for currencyCode in currencyCodesArray {
let currencyName = locale.displayName(forKey: NSLocale.Key.currencyCode, value : currencyCode)
let currencySymbol = locale.displayName(forKey: NSLocale.Key.currencySymbol, value : currencyCode)
if let currencySymbol = currencySymbol, let currencyName = currencyName {
currenciesDict[currencySymbol] = currencyName
}
}
print(currenciesDict)
编辑 2
与自定义模型相同的代码。
这就是您的自定义模型的样子。
class CurrencyModel {
var currencyName = ""
var currencyCode = ""
}
这就是代码的样子。
let locale = NSLocale.current as NSLocale
let currencyCodesArray = NSLocale.isoCurrencyCodes
var currencies = [CurrencyModel]()
for currencyCode in currencyCodesArray {
let currencyName = locale.displayName(forKey:
NSLocale.Key.currencyCode, value : currencyCode)
let currencySymbol = locale.displayName(forKey:NSLocale.Key.currencySymbol, value : currencyCode)
if let currencySymbol = currencySymbol, let currencyName = currencyName {
let currencyModel = CurrencyModel()
currencyModel.currencyName = currencyName
currencyModel.currencyCode = currencyCode
currencies.append(currencyModel)
}
}
print(currencies)