在 swift 5 中将货币文本字段转换为双倍?
Convert currency textfield to double in swift 5?
我有使用此 class 的货币文本字段。它工作正常(显示 1000000 -> 1,000,000)。如何从货币字符串转换回双精度值?请告诉我怎么做,非常感谢。
import UIKit
class CurrencyTextField: UITextField {
var lastValue = 0
let maxValue = 1_000_000_000_000_000_000
var amount: Int {
if let newValue = Int(string.digits), newValue < maxValue {
lastValue = newValue
} else if !hasText {
lastValue = 0
}
return lastValue
}
override func didMoveToSuperview() {
textAlignment = .right
keyboardType = .numberPad
text = Formatter.decimal.string(for: amount)
addTarget(self, action: #selector(editingChanged), for: .editingChanged)
}
@objc func editingChanged(_ textField: UITextField) {
text = Formatter.decimal.string(for: amount)
}
}
extension NumberFormatter {
convenience init(numberStyle: Style) {
self.init()
self.numberStyle = numberStyle
}
}
struct Formatter {
static let decimal = NumberFormatter(numberStyle: .decimal)
}
extension UITextField {
var string: String { return text ?? "" }
}
extension String {
private static var digitsPattern = UnicodeScalar("0")..."9"
var digits: String {
return unicodeScalars.filter { String.digitsPattern ~= [=11=] }.string
}
}
extension Sequence where Iterator.Element == UnicodeScalar {
var string: String { return String(String.UnicodeScalarView(self)) }
}
根据您在代码中显示的扩展,这应该可以将您的货币字符串转换为 Double
值:
let doubleValue = Double(yourCurrencyString.digits)
将 yourCurrencyString
替换为您保存货币字符串的任何变量。
我有使用此 class 的货币文本字段。它工作正常(显示 1000000 -> 1,000,000)。如何从货币字符串转换回双精度值?请告诉我怎么做,非常感谢。
import UIKit
class CurrencyTextField: UITextField {
var lastValue = 0
let maxValue = 1_000_000_000_000_000_000
var amount: Int {
if let newValue = Int(string.digits), newValue < maxValue {
lastValue = newValue
} else if !hasText {
lastValue = 0
}
return lastValue
}
override func didMoveToSuperview() {
textAlignment = .right
keyboardType = .numberPad
text = Formatter.decimal.string(for: amount)
addTarget(self, action: #selector(editingChanged), for: .editingChanged)
}
@objc func editingChanged(_ textField: UITextField) {
text = Formatter.decimal.string(for: amount)
}
}
extension NumberFormatter {
convenience init(numberStyle: Style) {
self.init()
self.numberStyle = numberStyle
}
}
struct Formatter {
static let decimal = NumberFormatter(numberStyle: .decimal)
}
extension UITextField {
var string: String { return text ?? "" }
}
extension String {
private static var digitsPattern = UnicodeScalar("0")..."9"
var digits: String {
return unicodeScalars.filter { String.digitsPattern ~= [=11=] }.string
}
}
extension Sequence where Iterator.Element == UnicodeScalar {
var string: String { return String(String.UnicodeScalarView(self)) }
}
根据您在代码中显示的扩展,这应该可以将您的货币字符串转换为 Double
值:
let doubleValue = Double(yourCurrencyString.digits)
将 yourCurrencyString
替换为您保存货币字符串的任何变量。