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

如何将阿拉伯数字转英文数字?UITextField输入阿拉伯数字致App崩溃

解决阿拉伯数字输入导致的崩溃问题

嘿,我太懂你这个崩溃的痛点了!之前帮朋友排查过类似的问题,核心原因就是你直接用CInt()去转换阿拉伯数字字符串——CInt只能识别ASCII码里的0-9,像١这种阿拉伯数字Unicode字符它根本认不出来,转换的时候会返回nil,再加上你用了强制解包!,这不崩溃才怪呢!

而且你代码里明明已经初始化了NumberFormatter,却没真正用它来处理输入,太可惜啦!这个工具就是专门用来处理不同语言、不同格式数字解析的。我给你改改代码,保证不管用户输英文数字还是阿拉伯数字都能正常运行:

func plussNumbers() {
    // 初始化数字格式化器,支持解析多语言数字
    let numberFormatter = NumberFormatter()
    numberFormatter.numberStyle = .decimal
    numberFormatter.locale = Locale.current // 自动适配系统当前语言环境
    
    textlable.numberOfLines = 0
    TextLable1.numberOfLines = 0
    
    // 处理第一个输入框和标签
    if let inputText = TextFailde.text, !inputText.isEmpty {
        // 追加文本到标签
        textlable.text = (textlable.text ?? "") + "\n" + inputText
        
        // 安全解析当前标签数字和输入数字,避免强制解包崩溃
        guard let currentNumber = numberFormatter.number(from: lblZeroUs.text ?? "")?.intValue,
              let inputNumber = numberFormatter.number(from: inputText)?.intValue else {
            // 这里可以加个提示,比如告诉用户输入了无效数字
            return
        }
        // 更新标签的数字总和
        lblZeroUs.text = String(currentNumber + inputNumber)
    }
    
    // 处理第二个输入框和标签
    if let inputText1 = TextFilde1.text, !inputText1.isEmpty {
        TextLable1.text = (TextLable1.text ?? "") + "\n" + inputText1
        
        guard let currentNumber1 = numberFormatter.number(from: lblZeroThey.text ?? "")?.intValue,
              let inputNumber1 = numberFormatter.number(from: inputText1)?.intValue else {
            // 错误处理逻辑
            return
        }
        lblZeroThey.text = String(currentNumber1 + inputNumber1)
    }
    
    previousValues.append(TextFailde.text ?? "0")
    previousValues1.append(TextFilde1.text ?? "0")
}

关键改动说明:

  • 用NumberFormatter替代CInt:numberFormatter.number(from:)能自动识别阿拉伯数字(比如١会被解析成1),只要设置好numberStyle和适配系统的locale,不管用户用英语还是阿拉伯语键盘都没问题。
  • 去掉所有强制解包!:用可选绑定和guard语句安全处理可选值,就算输入为空或者不是有效数字,也不会崩溃,还能在guard的else分支里加错误提示。
  • 修复了原代码的无效逻辑:你之前初始化了NumberFormatter却没用来解析输入,现在把它真正用在了数字转换的核心环节。

以后处理多语言数字的时候,记得优先用NumberFormatter,别再直接用Int()或者CInt()硬转啦!

内容的提问来源于stack exchange,提问作者X.BOZO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:43:47