【问题标题】:NumberFormatter in SwiftUI - Use of unresolved identifier 'formatter'SwiftUI 中的 NumberFormatter - 使用未解析的标识符“格式化程序”
【发布时间】:2020-11-07 22:38:58
【问题描述】:

在我的 SwiftUI 应用中,我需要处理货币。我正在尝试使用 NumberFormatter,但出现错误:

使用未解析的标识符“格式化程序”

上线:

self.valueAsString = formatter.string(for: self.value)

这是我的代码:

import SwiftUI

struct ContentView: View {
    @State private var newValueAsString = ""
    @State private var value: NSDecimalNumber = 0
    @State private var valueAsString = "0.0"
    
    let decimalBehavior = NSDecimalNumberHandler(roundingMode: .plain, scale: 2, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: true)
    
    private var currencyFormat: NumberFormatter = {
        let formatter = NumberFormatter()
        formatter.numberStyle = .currency
        formatter.usesSignificantDigits = true
        formatter.minimumSignificantDigits = 1 // default
        formatter.maximumSignificantDigits = 6 // default
        return formatter
    }()
    
    var body: some View {
        VStack {
            TextField("0", text: $newValueAsString, onCommit: {
                self.value = NSDecimalNumber(string: self.newValueAsString, locale: Locale.current).rounding(accordingToBehavior: self.decimalBehavior)
                self.valueAsString = formatter.string(for: self.value)
                // Tried this too:
                //  self.valueAsString = "\(formatter.string(for: self.value))"
            }
            )
                .multilineTextAlignment(.trailing)
                .font(Font.system(size: 30))
                .keyboardType(.decimalPad)
            
            // Just to test. Later I will save the value to Core Data.
            Text("\(self.value)")
            Text("\(self.valueAsString)")
        }
        .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

我想做的事:

  1. 使用 NumberFormatter 声明货币格式的规则。
  2. 将值 (newValueAsString) 作为字符串写入 TextField。
  3. 在提交时,newValueAsString 更改为 NSDecimalNumber 和 分配给 self.value。
  4. 使用将 NSDecimalNumber 值更改回字符串 (valueAsString) 格式化程序规则。 这里出现错误。

我做错了什么?

【问题讨论】:

    标签: ios swift formatting swiftui number-formatting


    【解决方案1】:

    你的意思可能是

    self.valueAsString = self.currencyFormat.string(for: self.value)
    

    【讨论】:

    • 太棒了!有用。谢谢 :) 我刚刚编辑了您的答案以添加 ?? "0" 为可选值提供默认值
    猜你喜欢
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    相关资源
    最近更新 更多