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

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)
}

逻辑说明

  1. 统一大小写转换:提前把搜索文本转成小写,避免在每次过滤时重复转换,提升效率。
  2. 处理单个分组:遍历每个表头-单元格分组,先过滤该分组下所有name包含搜索文本的单元格。
  3. 过滤空分组:如果某个分组过滤后没有剩余单元格,就通过compactMap自动移除这个分组,确保最终的数据源里只保留有匹配单元格的表头和对应内容。

这样处理后,搜索"Italy"时,只有"Europe"表头会被保留,且对应的cells里只有"Italy";"Africa"分组因为没有匹配的单元格会被完全移除,不会出现错误的表头和单元格组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:31:15