ios - SwiftUI 中的 NumberFormatter - 使用未解析的标识符 'formatter'

标签 ios swift formatting swiftui number-formatting

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

Use of unresolved identifier 'formatter'


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

  • 我究竟做错了什么?

    最佳答案

    可能你的意思是

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

    关于ios - SwiftUI 中的 NumberFormatter - 使用未解析的标识符 'formatter',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62965555/

    相关文章:

    swift - 根据 UITableViewCell 中 UIImageView 中的图像设置 UIView 宽度

    swift - 如何在wkwebview中下载文件

    database - 格式化数据,插入数据库之前还是之后?

    postgresql - 如何将 "1 day 01:30:00"之类的间隔转换为 "25:30:00"?

    ios - 点击时选择/取消选择 UIButton

    ios - Spritekit 不会显示呈现的场景

    ios - 无法创建此类应用程序/faSTLane 生成

    ios - 如何以编程方式从已安装的应用程序获取方案?

    Swift3 迁移问题

    c - GCC ARM C 编译器不遵守 -std=c99 的 %llx printf 格式化代码