首页 > 解决方案 > SwiftUI 中的 NumberFormatter - 使用未解析的标识符“格式化程序”

问题描述

在我的 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 声明currencyFormat 的规则。
  2. 将值 (newValueAsString) 作为字符串写入 TextField。
  3. 提交时,newValueAsString 更改为 NSDecimalNumber 并分配给 self.value。
  4. 使用格式化程序规则将 NSDecimalNumber 值更改回字符串 (valueAsString)。在这里我收到一个错误。

我究竟做错了什么?

标签: iosswiftformattingswiftuinumber-formatting

解决方案


可能你的意思是

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

推荐阅读