ios - 如何在编辑模式下删除字典中的键值对?
问题描述
如果我想在编辑模式下删除列表中的数组项,似乎没有问题。但是当涉及到字典时,我根本无法删除该项目。
struct ExploringEditButton2: View {
// private var users = ["Paul", "Taylor", "Adele"]
@State private var users = ["A": "1", "B": "2"]
var body: some View {
NavigationView {
List {
ForEach(Array(users.keys), id: \.self) { key in
Text(key)
}
.onDelete(perform: deleteOnKey)
}
.navigationBarItems(trailing: EditButton())
}
}
func deleteOnKey(key: String, user: [String:String]){
user[key] = nil //Cannot assign through subscript: 'user' is a 'let' constant
}
func deleteListItem(at offsets: IndexSet) {
print("offsets : \(offsets)")
users.remove(atOffsets: offsets)
}
}
知道这里出了什么问题吗?
更新答案:
我重写了 deleteListItem 函数。现在它起作用了。
func deleteListItem(at offset: IndexSet) {
print("offset \(offset) offset.first! : \(offset.first!)")
// let key = Array(self.users.keys)[offset.first!]
let key = Array(users.keys)[offset.first!]
self.users.removeValue(forKey: key)
}
解决方案
这是工作解决方案。使用 Xcode 11.4 / iOS 13.4 测试
struct ExploringEditButton2: View {
// private var users = ["Paul", "Taylor", "Adele"]
@State private var users = ["A": "1", "B": "2"]
var body: some View {
NavigationView {
List {
self.listContent(for: Array(users.keys))
}
.navigationBarItems(trailing: EditButton())
}
}
private func listContent(for keys: [String]) -> some View {
ForEach(keys, id: \.self) { key in
Text(key)
}
.onDelete { indexSet in
let key = keys[indexSet.first!]
self.users.removeValue(forKey: key)
}
}
}
推荐阅读
- javascript - 从 Promise 中捕获所有拒绝
- php - 如何更改 Godaddy 服务器上的 max_input_vars 值
- python - 如何使用正则表达式拆分列以将尾随 CAPS 移动到单独的列中?
- aws-lambda - Terraform:ConcurrentUpdateException:您已经对 Auto Scaling 资源进行了挂起的更新
- javascript - 对数组中的项目进行分组
- java - 要求在 Java 构建器中填充字段的某些模式
- python - Python 日志记录 - 基于记录器名称的 FileHandler 路径?
- c++ - 修复循环依赖 c++17 头文件
- typescript - IIS Express,打字稿,js文件存放的地方
- leaflet - 传单拖动显示问题