SwiftUI编译成功但持续出现DecimalFormatter相关报错排查求助
问题:TextField格式化器修改后仍出现自动消失的错误提示
之前添加过一个decimal格式化器,之后将其删除并修改了TextField的格式化器,但始终会出现一条自动消失的错误提示。已尝试重启Xcode、重启电脑、清理构建文件夹,编译可以成功,但当前代码中已无decimalFormatter相关引用,仍无法定位问题原因。
错误提示截图:
当前使用的格式化器代码:
let formatter: NumberFormatter = { let formatter = NumberFormatter() formatter.numberStyle = .decimal return formatter }()
报错关联的代码片段:
VStack { HStack { Text("Raddurchmesser") TextField("Durchmesser", value: $durchmesser, formatter: formatter) .textFieldStyle(DecimalTextFieldStyle(icon: Image(systemName: "pencil"), framesize: 110)) } } .onTapGesture { hideKeyboard()
排查与解决方案
1. 检查自定义DecimalTextFieldStyle实现
错误大概率来自你自定义的DecimalTextFieldStyle,可能内部残留了旧格式化器的引用,或者输入处理逻辑和当前传入的formatter冲突。重点检查:
- 样式代码中是否有未清理的
decimalFormatter相关代码 - 输入验证、文本转换逻辑是否与当前
NumberFormatter的规则兼容
2. 彻底清理应用缓存
如果是在模拟器/真机运行,应用缓存的旧逻辑可能导致问题:
- 模拟器:执行
Device > Erase All Content and Settings重置设备 - 真机:删除应用后重新编译安装
3. 手动清理DerivedData
仅通过Xcode清理构建文件夹可能不够彻底,手动删除DerivedData目录:
- 打开Xcode的
Settings > Locations,找到DerivedData的路径 - 关闭Xcode,删除该路径下的所有文件
- 重新打开项目并编译
4. 重置Xcode索引缓存
Xcode的索引缓存异常也可能引发这类奇怪问题:
- 按
Cmd+Shift+K清理构建文件夹 - 进入
File > Workspace Settings > Advanced,选择Custom后点击Reset重置索引
5. 验证绑定值类型匹配
确认durchmesser的类型(如Double/Float)与formatter的转换逻辑匹配,避免因类型不兼容产生隐性转换错误。
内容的提问来源于stack exchange,提问作者user2632918
相关产品推荐
相关产品推荐

