listview - 删除嵌套属性中的元素时更新 SwiftUI 列表
问题描述
所以我有一些看起来像这样的 SwiftUI 代码:
struct OverridesListView: View {
@ObservedObject var dataStore: DataStore
var body: some View {
NavigationView {
List {
ForEach(dataStore.data) { element in
Text(element.description)
}
.onDelete { indexSet in
self.dataStore.data.remove(atOffsets: indexSet)
}
}
}
}
}
结构如下DataStore
所示:
struct DataStore {
var data: [Element]
}
似乎当我向data
( dataStore.data.append(newElement)
) 添加新元素时,列表视图会相应更新。但是,从data
( self.dataStore.data.remove(atOffsets: indexSet)
) 中删除元素似乎不会更新列表。我在那行之后设置了一个断点,并确保它self.dataStore.data
实际上是空的。我错过了什么吗?
解决方案
不知道这甚至是如何为你编译的。这是它的工作原理:
import SwiftUI
typealias Element = String
class DataStore: ObservableObject {
@Published var data: [Element]
init(data: [Element]) {
self.data = data
}
}
struct OverridesListView: View {
@ObservedObject var dataStore: DataStore
var body: some View {
NavigationView {
List {
ForEach(dataStore.data, id: \.self) { element in
Text(element.description)
}
.onDelete { indexSet in
self.dataStore.data.remove(atOffsets: indexSet)
}
}
}
}
}
struct OverriesListView_Previews: PreviewProvider {
static var previews: some View {
OverridesListView(dataStore: DataStore(data: ["Blah", "Blubb"]))
}
}
推荐阅读
- javascript - 使用 setInterval 和 clearInterval 通过 HTML 输入复选框开始和停止文件重新加载
- django - 仅当不存在时 partial_update (PATCH Django Rest Framework)
- node.js - ZeroMQ 失去订阅连接
- python - 一个更好的 Python 包管理器
- spring-boot - 如何获取从角度发送的 Springboot 中的表单值?
- javascript - 输入模糊时隐藏弹出窗口,除非单击弹出窗口
- c# - 从readline问题到数组的C#字符串
- .net - Bot framework v4 .NET 通过重定向到不同的对话框来处理用户中断
- php - 如何在php中格式化多维数组上的数字?
- android - Google Drive REST API v3 Android - 需要登录错误