在SwiftUI中,我想在字典中存储一些关键字-值对数据.我可以将字典中的项目绑定到文本字段或需要绑定的其他地方吗?

我想做这样的事情:

@State var myDic: [String : String] = [
    "name": "Tim"
    "company": "Apple"
]

TextField("Name", text: $myDic["name"] ?? "")

其中行为是:

  • 如果字典中存在"名称":
    • 用户在文本字段中编辑将更改该值.
    • 用户删除文本字段中的内容(将其设置为""),词典将删除"名称"项.
  • 如果字典中不存在"名称":
    • 文本字段显示为空("").
    • 用户设置的值将让字典添加该项并分配值.

推荐答案

我会创建一个自定义的Dictionary脚注.

extension Dictionary where Value == String {
    subscript(emptyStringAsNil key: Key) -> Value {
        get { self[key] ?? "" }
        set { self[key] = newValue.isEmpty ? nil : newValue }
    }
}

用途:

TextField("Foo", text: $myDic[emptyStringAsNil: "name"])

Swift相关问答推荐

ScrollView中的视频渲染不流畅

依赖于@Environment的init@StateObject

如何为任务扩展的泛型静态函数获得自动类型推理

从`compactMap()`闭包返回`nil`未通过结果类型判断

从任务中打印

Swift 扩展:通过方法重载增强现有类

为什么 Swift URL 的 init?(string: String,relativeTo: URL?) 仅添加协议?

按数组大小进行类型判断?

是否可以限制 ExpressibleByIntegerLiteral struct 的初始值?

减小SF符号的边框宽度

如何使一个 Reality Composer 场景中的分组对象可拖动?

如何为等待函数调用添加超时

SwiftUI 视图的默认成员初始化器 VS 自定义初始化器

是否可以使任何协议符合 Codable?

单元测试和私有变量

Swift 2.0 方法不能标记为@objc,因为参数的类型不能在 Objective-C 中表示

仅在 Swift 中创建 Setter

在 ViewController 的 UICollectionView 中拉取刷新

如何在Swift中找出字母是字母数字还是数字

强制打开已在同一行代码中 Select 性访问的变量是否安全?