为何双TableView场景下skillsTableView未显示全部JSON数据?
问题原因及修复方案
核心错误点
你代码中的numberOfRowsInSection方法存在逻辑错误,直接导致skillsTableView无法显示全部数据:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if tableView == tableView { // 这里的条件恒为true return langCellArray.count } else { return skillsMasterData?.result?.skills?.count ?? 0 } }
tableView == tableView是永远成立的判断,无论当前处理的是哪个TableView,都会返回语言列表的行数。这就把skillsTableView的行数错误限制成了语言列表的长度,自然无法显示全部技能数据。
修复代码
将判断条件改为对比当前TableView是否是self.tableView(你的第一个TableView),剩余情况即为skillsTableView:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if tableView == self.tableView { return langCellArray.count } else { return skillsMasterData?.result?.skills?.count ?? 0 } }
额外优化建议
- 给两个TableView设置不同的tag值(比如
self.tableView.tag = 1,skillsTableView.tag = 2),通过tag判断区分TableView,代码可读性更强:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { switch tableView.tag { case 1: return langCellArray.count case 2: return skillsMasterData?.result?.skills?.count ?? 0 default: return 0 } }
- 把技能数据缓存为单独的可选数组,避免反复嵌套解包:
private var skillsList: [YourSkillModel]? { // 替换YourSkillModel为你的技能数据模型类 return skillsMasterData?.result?.skills }
后续在计算行数和获取单元格数据时直接使用skillsList,代码会更简洁。
内容的提问来源于stack exchange,提问作者Swift
相关产品推荐
相关产品推荐

