上下文
我有一个Binding
的Extension
限制为Float
,它将其转换为String
,以与SwiftUI
TextField
一起使用。然而,我遇到了两个奇怪的行为,而无法确定引起的问题:
1.当输入超过4位数字时,例如12345,TextField
清空
1.当输入小数点分隔符(例如“.”在美国),则TextField
清空
编码
public extension Binding where Value == Float {
var adapter: Binding<String> {
Binding<String>(
get: {
guard self.wrappedValue != -1 else { return "" }
let formatter = NumberFormatter()
formatter.locale = Locale.current
formatter.numberStyle = .decimal
return formatter.string(from: NSNumber(value: self.wrappedValue)) ?? ""
},
set: {
let formatter = NumberFormatter()
formatter.locale = Locale.current
formatter.numberStyle = .decimal
self.wrappedValue = formatter.number(from: $0)?.floatValue ?? -1
}
)
}
}
问题
- 是什么原因导致了这些错误?如何实现从
Binding<Float>
桥接到Binding<String>
的目标?
1条答案
按热度按时间1rhkuytd1#
不要重新发明轮子,而是使用新的格式样式