Swift中如何用readLine()比较String与Int类型数据?
解决Swift命令行验证器的类型转换与条件判断问题
你的代码存在的核心问题
- 重复调用
readLine():在if语句里再次调用readLine()获取age,导致之前输入的年龄被完全忽略,程序会要求用户重复输入年龄。 - 字符串直接比较年龄:字符串比较是按字符ASCII码顺序而非数值大小,比如
"9" > "18"会返回true,这完全不符合年龄判断的逻辑。 - 未处理无效输入:没有考虑用户输入非数字年龄的情况,会导致类型转换失败引发潜在错误。
修正后的代码
import Foundation // 获取并验证国家输入 print("Enter your country: ") guard let country = readLine(), !country.isEmpty else { print("Please enter a valid country.") exit(0) } // 获取年龄输入并转换为整数类型 print("Enter your age: ") guard let ageInput = readLine(), let age = Int(ageInput) else { print("Please enter a valid numeric age.") exit(0) } // 执行需求中的条件判断逻辑 if country == "USA" { if age < 18 { print("You're not allowed to apply to this position.") } else { print("You can forward to the next step.") } } else { // 可根据需求自定义非USA国家的处理逻辑,此处默认允许进入下一步 print("You can forward to the next step.") }
关键说明
- 安全解包与输入验证:使用
guard let确保输入不为空且能被正确解包,若输入无效则提示用户并退出程序,避免后续逻辑出现异常。 - 年龄类型转换:通过
Int(ageInput)将输入的字符串年龄转换为整数,只有转换成功才会进入后续判断,解决了类型不匹配的问题。 - 清晰的逻辑分支:先判断国家是否为USA,再根据年龄值执行对应逻辑,代码结构更易读和维护。
内容的提问来源于stack exchange,提问作者Heber Neto
相关产品推荐
相关产品推荐

