In my SwiftUI app I will need to work with currencies. I am trying to use NumberFormatter, but getting an error:
Use of unresolved identifier 'formatter'
on line:
self.valueAsString = formatter.string(for: self.value)
Here is the code I have:
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()
}
}
What I wanted to do:
What am I doing wrong?
Probably you meant
self.valueAsString = self.currencyFormat.string(for: self.value)