Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让iOS中的用户选择自己的货币_Ios_Swift_Xcode_Currency - Fatal编程技术网

如何让iOS中的用户选择自己的货币

如何让iOS中的用户选择自己的货币,ios,swift,xcode,currency,Ios,Swift,Xcode,Currency,我有一个iOS应用程序,不断从用户那里得到反馈,他们希望能够设置自己的货币类型。现在我正在使用currencyFormatter.locale获取用户的本地货币,并将其用于应用程序。我的想法是,我可以在应用程序的设置部分创建一个tableView,让用户选择他们想要使用的货币 我会在那里保存所需的货币,然后使用该货币,而不是现在显示的区域设置货币 要使此工作正常,我需要提取哪些数据?这些数据会由苹果公司提供吗?我想我需要,但这是正确的数据显示给用户选择吗 我发现了这一点,似乎这是一些有用的东西,

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

我会在那里保存所需的货币,然后使用该货币,而不是现在显示的区域设置货币

要使此工作正常,我需要提取哪些数据?这些数据会由苹果公司提供吗?我想我需要,但这是正确的数据显示给用户选择吗

我发现了这一点,似乎这是一些有用的东西,但它似乎不再得到支持/更新

我只是需要一些帮助来指明正确的方向,因为我的研究没有取得任何进展

编辑

我发现了一个应用程序,我认为它正在做一些类似于我想要实现的事情


您应该设置格式化程序的
currencySymbol

let currencyFormatter = NumberFormatter()
currencyFormatter.numberStyle = .currency
currencyFormatter.currencySymbol = "¥"
currencyFormatter.string(from: 123) // "¥123.00"
您可以向用户提供一个
UITextField
,让他们输入任意字符串作为货币符号

如果希望用户从列表中选择区域设置并使用该区域设置的货币符号,还可以使用
locale
实例的
currencySymbol
属性

关于地区和货币的澄清:


货币和地区没有一对一的对应关系。一种货币可以在多个地区使用,但一个地区通常有一种对应的货币,因为在
locale
中有一个
currencySymbol
。区域设置用于确定货币符号的位置。例如,在法国,货币符号将放在末尾。这意味着,如果您只有一个货币符号,那么字符串中就没有“正确”的位置,因为您没有指定区域设置。因此,如果您希望货币符号位于用户期望的位置,请向用户询问他们想要的区域设置,而不是货币符号。如果您不关心货币符号是否显示在用户预期的位置,则应使用用户的当前区域设置来显示它。

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

let currencyFormatter = NumberFormatter()
currencyFormatter.numberStyle = .currency
currencyFormatter.currencySymbol = "¥"
currencyFormatter.string(from: 123) // "¥123.00"
您可以向用户提供一个
UITextField
,让他们输入任意字符串作为货币符号

如果希望用户从列表中选择区域设置并使用该区域设置的货币符号,还可以使用
locale
实例的
currencySymbol
属性

关于地区和货币的澄清:


货币和地区没有一对一的对应关系。一种货币可以在多个地区使用,但一个地区通常有一种对应的货币,因为在
locale
中有一个
currencySymbol
。区域设置用于确定货币符号的位置。例如,在法国,货币符号将放在末尾。这意味着,如果您只有一个货币符号,那么字符串中就没有“正确”的位置,因为您没有指定区域设置。因此,如果您希望货币符号位于用户期望的位置,请向用户询问他们想要的区域设置,而不是货币符号。如果您不关心货币符号是否显示在用户预期的位置,则使用用户的当前区域设置显示它。

没错,您应该制作一个列表屏幕,让用户从中选择所需的货币。保存该货币并使用它而不是区域设置。您可以使用此代码获取货币名称和货币符号的列表

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)
这就是代码的样子

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)

没错,你应该制作一个列表屏幕,让用户从中选择他们想要的货币。保存该货币并使用它而不是区域设置。您可以使用此代码获取货币名称和货币符号的列表

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)
这就是代码的样子

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)

如果我让用户输入任何符号,货币格式如何正确显示数字?特别是货币符号的放置位置。正如我在上一段中所说,您可以让用户从区域设置列表中进行选择,并使用区域设置实例的
currencycomsymbol
属性@icekomo@icekomo您还可以考虑用户的区域设置可能与其所需的货币不一致,因此为了实现最大程度的自定义,货币符号和区域设置应该是单独的选项。还要注意的是,您不能仅仅通过查看用户所需的货币来获取用户的区域设置。欧元在许多不同的地区都有使用,所以我们的想法是让他们选择他们想要使用的任何货币符号(这就是为什么我认为在表视图或UIPicker中显示它们可能是最好的,然后将其用作格式。这对我来说都是全新的,所以我正在努力解决这个问题。我解决这个问题的方法有效吗@sweeper@icekomo查看编辑。如果不要求区域设置,则无法在用户预期的位置获取货币。可以始终使用用户的当前区域设置,这是我的第一个代码段所做的。如果我让用户输入任何符号,货币格式将如何正确显示数字?特别是在哪里放置货币符号。正如我在上一段中所说,您可以让用户从区域设置列表中选择,并使用
currencySymbol
pro区域设置实例的属性@icekomo@icekomo你也可以考虑这个事实