Swift 5中TextField数据刷新异常及弹窗后无法正常执行闰年计算的问题求助
问题分析与修复方案
嘿,我一眼就揪出问题啦!你的代码逻辑里有个致命的判断错误,这就是为啥弹窗后不管输入啥都一直弹警告的核心原因。
先看你这段代码的逻辑漏洞:
if let text = textField.text { if textField.text != nil { // 弹警告 } else { // 计算闰年 } }
你用if let text = textField.text做了可选绑定,这意味着只有当textField.text不为nil的时候,才会进入这个代码块。然后你又在里面判断textField.text != nil,这个条件永远是true啊!所以不管你输入什么内容(哪怕是有效的年份),程序都会执行弹警告的分支,完全走不到闰年计算的逻辑里。
之前你尝试的resignFirstResponder、调用viewWillAppear都没用,因为根本不是界面刷新或者响应者的问题,是判断逻辑写反了,而且判断条件完全错误。
修复后的代码
我给你调整了逻辑,同时做了一些体验优化:
@IBAction func submitButtonPressed(_ sender: UIButton) { // 先收起键盘,提升用户操作体验 textField.resignFirstResponder() // 第一步:检查输入是否为空(包括只输入空格的情况) guard let inputText = textField.text, !inputText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else { self.createAlert(titleField: "Error", messageField: "Please make sure you entered a year before tapping the submit button") return } // 第二步:检查输入是否是有效的整数年份 guard let year = Int(inputText) else { self.createAlert(titleField: "Error", messageField: "Please enter a valid number for the year") return } // 执行闰年计算(延迟可以保留,若不需要可直接调用) DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { self.leapYear.calculateYear(year: year, imageView: self.statusView) } }
代码改进点说明
- 用
guard let提前退出的写法,比嵌套if更清晰易读 - 不仅检查输入是否为空,还处理了只输入空格/换行的无效情况
- 增加了输入转整数的判断,避免强制解包
Int(text)!导致崩溃 - 先收起键盘,让用户操作更顺畅
这样修改后,你再测试一下:空输入会弹警告,输入非数字会弹格式错误,输入有效年份就会正常执行闰年计算啦。
内容的提问来源于stack exchange,提问作者Kadir Emre Yıldırım
相关产品推荐
相关产品推荐

