Swift使用NumberFormatter实现绑定值为0时TextField显示空字符串
实现0值时TextField显示空字符串的两种方案
方案1:配置NumberFormatter(推荐,最简实现)
你只需要修改NumberFormatter的zeroSymbol属性为空白字符串即可,系统会自动在绑定数值为0的时候显示空内容:
struct FoodItemView: View { @State var newFoodItem = Food(name: "") // 用闭包初始化格式化器,配置零值显示规则 private var numberFormatter: NumberFormatter = { let formatter = NumberFormatter() formatter.numberStyle = .decimal // 核心配置:数值为0时展示空字符串 formatter.zeroSymbol = "" return formatter }() var body: some View { Form { Section(header: Text("Basics").fontWeight(.bold)) { TextField("Name", text: $newFoodItem.name) TextField("Energy (C)", value: $newFoodItem.energy, formatter: numberFormatter) .keyboardType(.numberPad) TextField("Water (g)", value: $newFoodItem.water, formatter: numberFormatter) } } } }
方案2:自定义Binding(灵活适配复杂场景)
如果后续需要添加更多自定义校验、格式化规则,可以用自定义Binding手动处理数值和输入框内容的转换:
TextField("Energy (C)", text: Binding( get: { // 数值为0返回空字符串,否则返回格式化后的数值 newFoodItem.energy == 0 ? "" : String(format: "%.1f", newFoodItem.energy) }, set: { inputStr in // 输入为空或非法时默认赋值为0 guard let num = Float(inputStr) else { newFoodItem.energy = 0 return } newFoodItem.energy = num } )) .keyboardType(.numberPad)
内容的提问来源于stack exchange,提问作者dsynkd
相关产品推荐
相关产品推荐

