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
相关产品推荐
相关产品推荐

