Swift中如何过滤含自定义对象的元组数据源并同步筛选表头?
解决方案
你需要分两步处理:先过滤每个分组下符合条件的单元格,再移除那些过滤后没有有效单元格的分组,这样就能保证表头和单元格的对应关系正确。
具体实现代码如下:
// 先统一处理搜索文本的大小写,避免重复转换 let lowercasedSearchText = searchText.lowercased() filteredDataSource = dataSource.compactMap { section in // 过滤当前分组下符合条件的cells let filteredCells = section.cells.filter { $0.name.lowercased().contains(lowercasedSearchText) } // 如果过滤后还有单元格,就保留这个分组(更新后的cells),否则丢弃 guard !filteredCells.isEmpty else { return nil } return (header: section.header, cells: filteredCells) }
逻辑说明
- 统一大小写转换:提前把搜索文本转成小写,避免在每次过滤时重复转换,提升效率。
- 处理单个分组:遍历每个表头-单元格分组,先过滤该分组下所有
name包含搜索文本的单元格。 - 过滤空分组:如果某个分组过滤后没有剩余单元格,就通过
compactMap自动移除这个分组,确保最终的数据源里只保留有匹配单元格的表头和对应内容。
这样处理后,搜索"Italy"时,只有"Europe"表头会被保留,且对应的cells里只有"Italy";"Africa"分组因为没有匹配的单元格会被完全移除,不会出现错误的表头和单元格组合。
内容的提问来源于stack exchange,提问作者manubrio
相关产品推荐
相关产品推荐

