如何在iOS中为用户提供选择自己的货币的选择

时间:2018-08-10 03:07:25

标签: ios swift xcode currency

我有一个iOS应用程序,该应用程序不断从用户那里获得反馈,他们希望能够设置自己的货币类型。现在,我正在使用currencyFormatter.locale获取用户本地货币并将其用于应用程序。我的想法是,我可以在应用程序的设置部分中创建tableView,然后让用户选择他们要使用的货币。

我将在此处保存所需的货币,然后使用该货币代替现在显示的语言环境。

要完成这项工作,我需要提取哪些数据?苹果会提供这些数据吗?我认为我需要currency codes,但这是否是可供用户选择的正确数据?

我找到了这个repo,看来这很有用,但似乎不再受支持/更新了。

我只需要在正确的方向上指出一些帮助即可,因为我的研究对我没有任何进展。

Money

编辑

我找到了一个我认为与我想要实现的应用类似的应用。

enter image description here enter image description here

2 个答案:

答案 0 :(得分:1)

您应该改为设置格式程序的currencySymbol

let currencyFormatter = NumberFormatter()
currencyFormatter.numberStyle = .currency
currencyFormatter.currencySymbol = "¥"
currencyFormatter.string(from: 123) // "¥123.00"

您可以为用户提供UITextField,让他们输入任意字符串作为货币符号。

如果您希望用户从列表中选择一个语言环境并使用该语言环境的货币符号,那么也可以使用currencySymbol实例的Locale属性。

说明语言环境和货币:

货币和语言环境没有一一对应的关系。一种货币可以在多种语言环境中使用,但是一种语言环境通常具有一种对应的货币,因为currencySymbol中有Locale。语言环境用于确定货币符号在哪里。例如,在法国,货币符号将放在末尾。这意味着,如果您仅使用货币符号,则由于没有指定语言环境,因此在字符串中没有“正确”的位置。因此,如果您希望货币符号位于用户期望的位置,请向用户询问他们想要的语言环境,而不是货币符号。如果您不关心货币符号是否显示在用户的预期位置,请与用户的当前语言环境一起显示。

答案 1 :(得分:1)

是的,您应该创建一个列表屏幕,并让用户从中选择所需的货币。保存该货币并使用它代替语言环境。您可以使用此代码获取货币名称和货币符号的列表。

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;

编辑

下面是相同的代码。

 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)