将Swift 3的UITableView单元格删除函数迁移至Swift 5
Swift 3 转 Swift 5:UITableView 单元格删除函数改写
嘿,这就帮你把这段Swift 3的代码转换成Swift 5版本,还顺便优化下交互体验~
基础语法适配版本
先给你最直接的语法转换版本,保证和原逻辑一致:
override func tableView(_ tableView: UITableView, commit editingStyle: UITableView.EditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { foods.remove(at: indexPath.row) tableView.reloadData() } }
更推荐的优化版本(带删除动画)
上面的版本只是完成了语法适配,但reloadData()会刷新整个表格,体验不够丝滑。Swift 5里我们可以用系统自带的删除动画,让交互更符合iOS规范:
override func tableView(_ tableView: UITableView, commit editingStyle: UITableView.EditingStyle, forRowAt indexPath: IndexPath) { guard editingStyle == .delete else { return } // 先修改数据源 foods.remove(at: indexPath.row) // 仅对目标行执行删除动画,而非刷新整个表格 tableView.deleteRows(at: [indexPath], with: .automatic) }
关键变化说明
- 枚举命名简化:Swift 3中的
UITableViewCellEditingStyle在Swift 5里被重命名为UITableView.EditingStyle,而且因为函数参数已经指定了类型,我们直接写.delete就可以,不用写完整的枚举名。 - 交互体验升级:替换
reloadData()为deleteRows(at:with:),只会对指定行执行删除动画,比刷新整个表格更流畅,用户体验更好。
内容的提问来源于stack exchange,提问作者EverythingEnds
相关产品推荐
相关产品推荐

