You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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目录:

  1. 打开Xcode的Settings > Locations,找到DerivedData的路径
  2. 关闭Xcode,删除该路径下的所有文件
  3. 重新打开项目并编译

4. 重置Xcode索引缓存

Xcode的索引缓存异常也可能引发这类奇怪问题:

  • 按Cmd+Shift+K清理构建文件夹
  • 进入File > Workspace Settings > Advanced,选择Custom后点击Reset重置索引

5. 验证绑定值类型匹配

确认durchmesser的类型(如Double/Float)与formatter的转换逻辑匹配,避免因类型不兼容产生隐性转换错误。


内容的提问来源于stack exchange,提问作者user2632918

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:05:23