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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:25:22