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

如何在SwiftUI中为Dictionary提供编辑界面

错误原因

直接对@Binding修饰的字典使用$entries[key]语法会触发编译问题,根源有两个:

  • SwiftUI 中Binding对字典的默认下标返回值为Binding<Value?>可选类型,而TextField要求传入的是Binding<String>非可选类型,类型不匹配
  • 字典不属于MutableCollection类型,不支持Binding的默认下标访问语法
正确实现方案

因为你明确编辑过程中字典的键固定,可确定遍历到的key一定存在于字典中,我们可以手动构造非可选的Binding实例来完成绑定,修正后代码如下:

struct DictionaryEditor: View {
    @Binding var entries: [String: String]

    var body: some View {
        List {
            ForEach(entries.sorted(by: <), id: \.key) { key, _ in
                HStack {
                    Text(key)
                    TextField("", text: Binding(
                        get: { entries[key] ?? "" },
                        set: { entries[key] = $0 }
                    ))
                }
            }
        }
    }
}

代码说明

  • 这里没有使用系统自动生成的$entries语法,而是通过Binding的自定义构造方法分别实现读、写逻辑
  • get闭包返回对应key的存储值,使用?? ""做兜底处理,即使出现key缺失的异常场景也不会触发崩溃
  • set闭包将TextField输入的新值直接赋值给字典对应key的位置,完成数据更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:54:03