【发布时间】:2020-06-12 08:44:53
【问题描述】:
struct PriceField: View {
@ObservedObject var textFieldManager = TextFieldManager()
@State var number : Double = 0
@State var inputString = ""
var body: some View {
HStack{
// Text(format(num: textFieldManager.number))
Text("\(textFieldManager.number)")
TextField("RM", value: $textFieldManager.number, formatter: NumberFormatter.currency){
UIApplication.shared.endEditing()
}
.multilineTextAlignment(.trailing)
// .keyboardType(.numberPad)
}
}
}
extension NumberFormatter {
static var currency: NumberFormatter {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = Locale(identifier: "ms_MY")
return formatter
}
}
func format(num: Double) -> String{
let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "ms_MY")
formatter.numberStyle = .currency
if let formattedAmount = formatter.string(from: num as NSNumber) {
return formattedAmount
}
else{
return "Formatting error ... "
}
}
class TextFieldManager: ObservableObject {
@Published var number : Double = 0 {
didSet{
print("change from:", oldValue, "to:", "\(number)")
}
}
}
当我输入 RM12.34255 并按“返回”时,文本字段显示 RM12.34(格式为所需的小数)。然而,它 没有将我的班级财产更新为 RM12.34,而是得到 更新为 RM12.34255。我该如何解决这个问题?
似乎货币名称(RM)可以被删除并且有一个 用户可以输入没有当前符号的数字的机会 它会产生错误“MultiLineTextView[31301:771480] [SwiftUI] 值“12.34255”无效。”。是否可以使文本 文本字段中的“RM”不可擦除?
更新代码:
func format(num: Double) -> Double{
let doubleStr = String(format: "%.2f", num) // "3.14"
let doubleNum = Double(doubleStr)!
print("doubleStr \(doubleStr), doubleNum \(doubleNum)")
return doubleNum
}
class TextFieldManager: ObservableObject {
@Published var number : Double = 0 {
didSet{
print("change from:", oldValue, "to:", "\(number)")
formattedNumber = format(num: number)
print("formattedNumber is : \(formattedNumber)")
}
}
@Published var formattedNumber : Double = 0
}
【问题讨论】:
标签: ios swift swiftui number-formatting