【问题标题】:Storing Locale to CoreData Swiftui将语言环境存储到 CoreData Swiftui
【发布时间】: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


【解决方案1】:

谢谢你们。

解决方法如下:

  1. 我在 Core Data 中针对我用来填充 List 的实体存储了区域设置标识符:

    @State var localeIdentifier = Locale.current.identifier

  2. 当我想格式化货币时,我使用存储的标识符为我的格式化程序启动一个新的语言环境:

    currencyFormatter.locale = Locale.init(标识符: localeIdentifier)

【讨论】:

    猜你喜欢
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 2019-06-25
    相关资源
    最近更新 更多