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

Swift中如何简化冗长多层嵌套的if else条件判断语句

冗余if-else分支重构方案

核心思路是用数据配置映射替代硬编码条件判断,把分散在各个分支里的UI赋值规则抽成结构化配置,运行时直接匹配配置赋值,彻底消除嵌套分支。

第一步:定义配置模型

先把每个分支里零散的UI属性封装成统一模型,避免赋值逻辑散落在各处:

// 单天对应的所有UI属性配置
struct DayConfig {
    let day: Int
    let dayOrdinal: String // 1st/2nd/3rd这类序数文本
    let isTestLabelHidden: Bool
    let isSubjectLabelHidden: Bool
    let subjectText: String?
    let unitText: String?
    let titleText: String
}

// 老师数+学生数组合对应的全量天数配置
struct SceneConfig {
    let teacherCount: Int
    let studentCount: Int
    let dayMap: [Int: DayConfig] // key为实际天数 = interval.day! + 1
}

第二步:集中维护所有规则

把所有判断分支的规则统一放到配置表里,你现在已经写好的(4,27)场景直接填入,其他空分支后续补内容只需要加配置条目,不需要写判断逻辑:

let configRepository: [SceneConfig] = [
    SceneConfig(
        teacherCount: 4,
        studentCount: 27,
        dayMap: [
            1: DayConfig(
                day: 1,
                dayOrdinal: "1st",
                isTestLabelHidden: true,
                isSubjectLabelHidden: false,
                subjectText: "Physics",
                unitText: nil,
                titleText: "Today is your first day"
            ),
            2: DayConfig(
                day: 2,
                dayOrdinal: "2nd",
                isTestLabelHidden: true,
                isSubjectLabelHidden: false,
                subjectText: "Chemistry",
                unitText: nil,
                titleText: "Today is your Second day"
            ),
            3: DayConfig(
                day: 3,
                dayOrdinal: "3rd",
                isTestLabelHidden: true, // 原代码未显式设置该值,可按实际业务调整
                isSubjectLabelHidden: true,
                subjectText: nil,
                unitText: "Mathematics",
                titleText: "Today is your Third day"
            ),
            4: DayConfig(
                day: 4,
                dayOrdinal: "4th",
                isTestLabelHidden: false,
                isSubjectLabelHidden: false,
                subjectText: "Physics",
                unitText: nil,
                titleText: "Today is your fourth day"
            )
        ]
    ),
    // 其余(4,28)、(4,29)...(7,30)场景,直接在此处追加SceneConfig条目即可
]

第三步:替换原有分支逻辑

原来几十上百行的嵌套if-else,直接替换成几行配置查找+统一赋值的代码:

// 直接用Int类型计算天数,避免无意义的字符串转换,匹配效率更高
let currentDay = interval.day! + 1

// 查找匹配的配置
guard let targetScene = configRepository.first(where: {
    $0.teacherCount == numberOfTeachers && $0.studentCount == numberOfStudents
}), let targetDayConfig = targetScene.dayMap[currentDay] else {
    // 无匹配配置的兜底逻辑,按需实现即可
    return
}

// 统一给UI控件赋值
daysLabel.text = targetDayConfig.dayOrdinal
testLabel.isHidden = targetDayConfig.isTestLabelHidden
subjectLabel.isHidden = targetDayConfig.isSubjectLabelHidden
subjectLabel.text = targetDayConfig.subjectText
unitLabel.text = targetDayConfig.unitText
dayTitleLabel.text = targetDayConfig.titleText

方案优势

  • 维护成本极低:所有文案、显隐规则集中在配置表管理,修改规则、新增场景/天数时不需要动核心赋值逻辑,不会出现分支漏写、判断条件写错的问题
  • 性能更好:去掉了多余的字符串类型转换,直接用Int值做匹配,避免字符串比较的额外开销
  • 扩展性强:后续如果规则变多,甚至可以把配置表改成从本地JSON文件读取,不需要发版就能更新内容;序数词也可以抽工具方法自动生成,不需要手动填写1st/2nd这类文本。

内容的提问来源于stack exchange,提问作者Abhishek Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:18:25