【发布时间】:2020-12-30 07:35:17
【问题描述】:
我想将区域设置存储到核心数据中,我可以将其分配给列表项。因此,当用户更改区域设置时,原始货币等的格式不会受到更改的影响,因此应用仍然可以运行。
我认为这将是有用的,即使用户通常不会经常更改区域。
我已经使用当前区域设置定义了货币格式化程序:
var currencyFormatter: NumberFormatter = {
let formatter = NumberFormatter()
formatter.usesGroupingSeparator = true
formatter.numberStyle = .currency
formatter.locale = Locale.current
return formatter
}()
我有一个使用它的函数。格式化货币和 b。剥离它进行处理:
func formatCurrency(text: String, edit: Bool, currencyCode: String) -> String {
if(!edit && text.count > 0) {
let myDouble = (text as NSString).doubleValue
let myNumber = NSNumber(value:myDouble)
let priceString = currencyFormatter.string(from: myNumber) ?? "0.00"
print(priceString)
return priceString
} else {
let myDouble = (text as NSString).doubleValue
let myNumber = NSNumber(value:myDouble)
let returnValue = currencyFormatter.number(from: text) ?? myNumber
if(returnValue == 0){
return ""
}
return returnValue.stringValue
}
}
我尝试将 Core Data 中的 'currencyFormatter.currencyCode' 保存为文本,这很有效,但是由于您需要考虑小数点符号和分隔符等。由于参数很多,这变得很笨拙。以下是一些:
print("currencyDecimalSeparator - " + currencyFormatter.currencyDecimalSeparator)
print("currencySymbol - " + currencyFormatter.currencySymbol)
print("currencyGroupingSeparator - " + currencyFormatter.currencyGroupingSeparator)
print("internationalCurrencySymbol - " + currencyFormatter.internationalCurrencySymbol)
print("currencyCode - " + currencyFormatter.currencyCode)
print("decimalSeparator - " + currencyFormatter.decimalSeparator)
我希望有一种简洁的方式来存储Locale.current,以便在访问特定列表项时将其分配回去。
谢谢你, 艾蒂安
【问题讨论】:
-
我想先看看你的代码。
-
评论不是代码的地方 - 只需编辑您的帖子并在其中添加您的代码
-
Locale 有一个字符串类型的标识符属性,你为什么不存储它。但整个想法对我来说似乎是错误的,如果用户更改区域设置,那么混合格式将非常令人困惑。
-
您好 Joakim,我们的想法是保留您为当时的货币添加的任何贷款。就像您确实更改了您的区域一样,您在该时间点添加的负载对于该国家和地区设置仍然有效。我认为果汁可能不值得挤压,因为实际上人们不会经常改变他们的地区。但是值得尝试看看是否有一个简单的解决方案......
-
谢谢。我将尝试设置语言环境标识符。找到以下文章:onmyway133.github.io/blog/How-to-specify-locale-in-Swift
标签: swift core-data swiftui locale region