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

Swift中如何通过拼接字符串或变量来访问关联的作业列表变量?

用字典替代单独变量,优雅解决动态作业列表访问问题

嘿,我完全懂你想实现的功能——根据用户选中的课程动态展示对应作业列表,不想为每个科目都写重复的ViewController。直接通过字符串拼接变量名的方式在Swift里确实走不通,因为Swift是静态类型语言,没办法动态通过字符串访问变量。不过咱们换个思路,用字典就能完美解决这个问题,而且代码会更简洁易维护!

第一步:把分散的作业变量换成字典

你原来的Languagehw、Mathhw这些单独变量,都可以放进一个字典里,让课程名称直接对应到它的作业列表:

@IBOutlet var className: UILabel!
// 用字典关联课程名和作业列表,比单独变量好用太多
var homeworkDict: [String: [String]] = [
    "Language": ["hi", "bye", "New Assignment . . .", "Remove Assignment . . ."],
    "Math": ["him", "bye", "New Assignment . . .", "Remove Assignment . . ."],
    "English": ["hime", "bye", "New Assignment . . .", "Remove Assignment . . ."]
]
// 课程列表直接从字典的keys里生成,不用手动维护两个地方
var classList: [String] {
    return Array(homeworkDict.keys)
}

第二步:在didSelectRowAt里动态获取作业列表

当用户选中某门课程时,直接用选中的课程名从字典里取对应的作业列表就行,完全不用拼接字符串:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let selectedClass = classList[indexPath.row]
    className.text = selectedClass
    
    // 直接拿到对应的作业列表,安全又方便
    if let selectedHomework = homeworkDict[selectedClass] {
        // 这里就可以用selectedHomework来更新你的作业展示TableView了
        // 比如给作业列表的数据源赋值,然后刷新tableView
        self.homeworkDataSource = selectedHomework
        self.homeworkTableView.reloadData()
    }
}

第三步:优化addAssignment函数

原来的循环判断可以直接删掉,用字典的键值访问就能快速定位到对应科目:

func addAssignment(subject: String) {
    // 先检查字典里有没有这个科目,避免崩溃
    guard var homeworkList = homeworkDict[subject] else {
        print("找不到对应的科目哦")
        return
    }
    
    // 这里添加新作业的逻辑,比如插入到"New Assignment..."前面
    homeworkList.insert("你的新作业内容", at: homeworkList.count - 2)
    
    // 把更新后的列表存回字典
    homeworkDict[subject] = homeworkList
    
    // 刷新作业TableView,让新作业显示出来
    homeworkTableView.reloadData()
}

为什么用字典更好?

  • 避免拼写错误:不用手动拼接字符串找变量,直接用课程名当键,Swift会帮你做类型检查
  • 易维护:以后要加新科目,直接往字典里加一组键值对就行,不用额外定义新变量
  • 代码更简洁:省去了一堆重复的变量定义和循环判断逻辑,可读性拉满

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 17:57:40