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
相关产品推荐
相关产品推荐

