【问题标题】:Update SwiftUI list when removing an element in a nested property删除嵌套属性中的元素时更新 SwiftUI 列表
【发布时间】:2020-04-22 23:33:46
【问题描述】:

所以我有一些看起来像这样的 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 实际上是空的。我错过了什么吗?

【问题讨论】:

    标签: listview swiftui


    【解决方案1】:

    不确定这甚至是如何为您编译的。它是这样工作的:

    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"]))
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 2019-07-13
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多