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

Swift iOS文本框特殊字符校验代码运行导致项目崩溃如何解决

代码问题分析与修复方案

现存问题

  • 可选值处理不当引发崩溃:输入框的text属性为String?可选类型,直接使用== ""判断空值时,如果text为nil,判断结果会返回false,后续逻辑直接访问内容会触发解包崩溃。如果输入框的IBOutlet是隐式解包类型且没有正确和控件连线,也会直接触发崩溃。
  • 字符集与业务逻辑冲突:提示文案要求用户输入数字,但定义的characterset包含了大小写英文字母、大量特殊符号,校验逻辑完全不符合业务要求,会出现非数字输入通过校验的问题,后续执行乘法运算的类型转换时会触发崩溃。
  • 校验逻辑冗余有漏洞:多层if else判断重复度极高,且没有覆盖所有输入场景,比如两个输入框存在非法字符的场景会直接跳出校验逻辑,后续计算时必然触发崩溃。

修复方案

首先修正字符集定义,再优化校验逻辑,优先安全解包所有可选值:

字符集与生命周期代码

// 仅保留数字字符集,匹配输入数字的业务要求,允许小数可额外添加.字符
let characterset = CharacterSet(charactersIn: "0123456789")
override func viewDidLoad() {
    super.viewDidLoad()
}

点击事件校验逻辑

@IBAction func actionMultiplyAns(sender:UIButton) {
    // 安全解包所有输入框文本,空值统一处理为空字符串
    let text1 = txtFldOne.text ?? ""
    let text2 = txtFldTwo.text ?? ""
    let text3 = txtFldThree.text ?? ""
    
    // 全为空判断
    if text1.isEmpty && text2.isEmpty && text3.isEmpty {
        alert(Title: "No Input", Message: "Kindly Enter SomeInput")
        return
    }
    
    // 批量校验非空输入是否包含非法字符
    let hasInvalidInput = [text1, text2, text3].contains { content in
        !content.isEmpty && content.rangeOfCharacter(from: characterset.inverted) != nil
    }
    
    if hasInvalidInput {
        alert(Title: "Use Numbers", Message: "Kindly Enter Numberic Inputs")
        return
    }
    
    // 后续正常执行乘法计算逻辑
}

补充检查项

确认三个输入框的IBOutlet已经正确和xib/Storyboard上的对应控件连线,避免隐式解包失败崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 15:48:01