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

SwiftUI中如何基于[String: [Int]]字典创建可展开列表

解决SwiftUI字典分组列表的展开功能问题

要实现可展开的分组列表,核心是用DisclosureGroup组件管理每个分组的展开状态,同时维护一个状态字典跟踪每个key的展开状态。修改后的代码如下:

struct ExpandableListView: View {
    // 定义字典数据
    let dict: [String: [Int]] = ["key1": [1,2,3,4], "key2": [6,7,8,9]]
    // 跟踪每个分组的展开状态,默认全部折叠
    @State private var expandedStates: [String: Bool] = [:]
    
    var body: some View {
        List {
            // 遍历排序后的字典key
            ForEach(dict.keys.sorted(), id: \.self) { key in
                // 使用DisclosureGroup实现展开折叠
                DisclosureGroup(isExpanded: $expandedStates[key, default: false]) {
                    // 分组内容:遍历对应的值数组
                    if let values = dict[key] {
                        ForEach(values, id: \.self) { x in
                            Text("\(x)")
                        }
                    }
                } label: {
                    // 分组标题
                    Text(key)
                }
            }
        }
        .onAppear {
            // 初始化所有分组的默认折叠状态
            dict.keys.forEach { key in
                expandedStates[key] = false
            }
        }
    }
}

关键修改说明:

  • @State变量expandedStates:用字典存储每个分组的展开状态,default: false确保未初始化的key默认折叠。
  • DisclosureGroup组件:替代原来的Section,它自带展开/折叠的UI交互,通过isExpanded绑定状态变量控制显示。
  • 安全解包:把原来的dict[key]!改成if let values = dict[key],避免字典key不存在时的崩溃。
  • 初始化状态:在onAppear中给所有key设置初始折叠状态,确保初始界面一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:55:58