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

Swift开发:添加待办事项至数组后TableView未更新的问题

嘿,我一眼就瞅到你代码里的小问题啦!这是个新手很容易踩的变量名冲突坑,咱们来一步步解决它:

问题根源

你的核心问题是:局部变量覆盖了全局的待办事项数组,导致新的待办根本没被加到全局数组里,刷新tableView当然看不到变化啦!

看你addTodo方法里的这段代码:

if var todo = inputBar.text {
    print(todo);
    todo.append(todo)
    reload()
}

这里的var todo = inputBar.text创建了一个局部的字符串变量,它和你定义的全局[String]数组todo重名了!所以你执行的todo.append(todo)只是把这个局部字符串自己追加给自己(比如输入"吃饭"会变成"吃饭吃饭"),而真正存待办的全局数组完全没被修改。

修复方案

把局部变量改名,同时加个非空判断(避免添加空待办),再顺手清空输入框提升体验:

@IBAction func addTodo(_ sender: UIButton) {
    // 先判断输入内容不是空字符串(也去掉前后空格)
    guard let newTodo = inputBar.text, 
          !newTodo.trimmingCharacters(in: .whitespaces).isEmpty else {
        return
    }
    // 往全局的待办数组里加新项
    self.todo.append(newTodo)
    // 清空输入框,方便下一次输入
    inputBar.text = ""
    // 刷新表格
    reload()
}
额外小Tips
  • 建议把全局数组的名字改成todoItems这种更清晰的,从根源上避免变量名冲突的问题
  • 在viewDidLoad里可以加一行inputBar.returnKeyType = .done,这样用户按回车也能添加待办,体验更好
  • 如果后续要做搜索功能,记得要区分原始的待办数组和搜索过滤后的数组哦

这样改完之后,点击addTodo按钮就能正确添加待办,并且tableView会刷新显示新内容啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:57:30