Обновление списка SwiftUI при удалении элемента во вложенном свойстве - PullRequest
0 голосов
/ 23 апреля 2020

Итак, у меня есть некоторый код 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 фактически пуст. Я что-то упустил?

1 Ответ

0 голосов
/ 23 апреля 2020

Не уверен, как это даже компилируется для вас. Вот как это работает:

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"]))
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...