修改有关将货币添加到UITextField的旧文章

时间:2019-06-24 19:04:27

标签: swift uitextfield

在此page中,我采用了这段关于在UITextfield中添加货币的代码。

shell=True

}

此代码有两个问题

1-在class CurrencyField: UITextField { var string: String { return text ?? " " } var decimal: Decimal { return string.decimal / pow(10, Formatter.currency.maximumFractionDigits) } var decimalNumber: NSDecimalNumber { return decimal.number } var doubleValue: Double { return decimalNumber.doubleValue } var integerValue: Int { return decimalNumber.intValue } let maximum: Decimal = 999_999_999.99 private var lastValue: String? override func willMove(toSuperview newSuperview: UIView?) { // you can make it a fixed locale currency if needed // Formatter.currency.locale = Locale(identifier: "pt_BR") // or "en_US", "fr_FR", etc addTarget(self, action: #selector(editingChanged), for: .editingChanged) keyboardType = .numberPad textAlignment = .right editingChanged(self) } override func deleteBackward() { text = string.digits.dropLast().string editingChanged(self) } @objc func editingChanged(_ textField: UITextField) { guard decimal <= maximum else { text = lastValue return } text = Formatter.currency.string(for: decimal) lastValue = text } } extension NumberFormatter { convenience init(numberStyle: Style) { self.init() self.numberStyle = numberStyle } } extension Formatter { static let currency = NumberFormatter(numberStyle: .currency) } extension String { var digits: String { return filter(("0"..."9").contains) } var decimal: Decimal { return Decimal(string: digits) ?? 0 } } extension Decimal { var number: NSDecimalNumber { return NSDecimalNumber(decimal: self) } 函数的这一行代码中,有一个我无法解决的错误

deleteBackward()

这是错误:

 text = string.digits.dropLast().string

2-这些代码使我们可以在Value of type 'String.SubSequence' (aka 'Substring') has no member 'string' 中添加货币值,我希望当其值为UITextField时,它在布尔变量中传递true。 我可以这样做:

0.00

但是我认为这不是最好的方法,它可能会导致一些其他错误,您能建议我什么更好的方法吗? 非常感谢

0 个答案:

没有答案