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

如何无需编写大量if语句,根据int值匹配对应字符串?

实现方案

直接用映射表替换所有if判断即可,13种取值和10个label的场景下完全可以把代码量控制在几十行以内,且后续维护成本极低。

  • 首先定义Int到等级字符串的映射字典,13种对应关系一次定义,全项目可复用:
let gradeMapping: [Int: String] = [
    1: "A+",
    2: "A",
    3: "A-",
    4: "B+",
    5: "B",
    6: "B-",
    // 剩余的对应关系按你的实际需求补全即可
    13: "F"
]
  • 单个label赋值时无需任何判断,一行代码完成转换,找不到对应取值时可以设置默认值避免崩溃:
class1LetterGrade = gradeMapping[class1Grade] ?? "未评级"
  • 如果10个label需要同时赋值,可以把对应成绩和label打包成数组批量处理,连重复的赋值代码都可以省掉:
// 按你的实际业务把10组成绩、对应label整理为数组
let gradeLabelPairs: [(grade: Int, label: UILabel)] = [
    (class1Grade, class1LetterLabel),
    (class2Grade, class2LetterLabel),
    (class3Grade, class3LetterLabel),
    // 剩余7组按实际情况补全
]

// 循环批量完成所有label的内容赋值
gradeLabelPairs.forEach { 
    $0.label.text = gradeMapping[$0.grade] ?? "未评级"
}

可选优化:如果你的13个Int取值是从1到13连续无断档,也可以用数组做映射,性能和字典基本一致:

// 下标0做占位,对应1~13的取值直接取下标1~13的内容
let gradeArray: [String] = ["", "A+", "A", "A-", "B+", ... , "F"]
class1LetterGrade = gradeArray[class1Grade]

更推荐使用字典方案,容错性更高,后续如果取值规则调整不需要改动顺序,也不会出现数组越界崩溃的问题,完全符合你要求的原始值保留Int类型的要求,UIPicker返回的Int值可以直接使用无需转换。

内容的提问来源于stack exchange,提问作者Cooper H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:15:04