首页 > 解决方案 > 将语言环境存储到 CoreData Swiftui

问题描述

我想将语言环境存储到核心数据中,我可以将其分配给列表项。因此,当用户更改区域设置时,原始货币等的格式不会受到更改的影响,因此应用程序仍然可以运行。

我认为这将是有用的,即使用户通常不会经常更改区域。

我已经使用当前的语言环境设置定义了一个货币格式化程序:

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,可以在访问特定列表项时将其分配回去。

谢谢你,艾蒂安

标签: swiftcore-dataswiftuilocaleregion

解决方案


感谢你们。

解决方法如下:

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

    @State var localeIdentifier = Locale.current.identifier

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

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


推荐阅读