Это будет действительно быстрое руководство, потому что SwiftUI делает удаление элемента списка очень простым.
Шаг 1. Создайте источник данных
Обновите свой ContentView
, чтобы он выглядел так:
struct ContentView: View { @State var listItems = ["Item 1", "Item 2", "Item 3"] var body: some View { Text("Hello World") } }
Теперь у нас есть источник данных. Поскольку у него есть оболочка свойств State
, список будет обновляться, когда произойдут изменения в listItems
.
Шаг 2. Добавьте представление списка
Замените представление Hello World
Text
следующим:
List { ForEach(listItems, id: \.self) { (item) in Text(item) } }
Теперь вы можете запустить приложение и увидеть элементы в списке.
Шаг 3. Добавьте метод onDelete
Обновите список, чтобы он выглядел так:
List { ForEach(listItems, id: \.self) { (item) in Text(item) }.onDelete { (indexSet) in self.listItems.remove(atOffsets: indexSet) } }
Все, что мы сделали, это добавили onDelete
к каждому элементу в нашем списке. onDelete
принимает в качестве аргумента IndexSet
. Мы можем использовать аргумент indexSet
, чтобы удалить правильный элемент из нашего массива listItems
.
Чтобы удалить его из listItems
, мы вызываем метод remove
на listItems
и проходим через indexSet
.
Шаг 4: очистка
Это не требуется, потому что закрытие, которое мы используем для onDelete
, невелико, но если бы у нас была другая логика при удалении, было бы лучше, чтобы это было в отдельном методе.
Создайте новый метод с именем deleteItem
под свойством body
:
private func deleteItem(at indexSet: IndexSet) { self.listItems.remove(atOffsets: indexSet) }
Теперь мы можем вызвать метод deleteItem
из onDelete
. Для этого обновите onDelete
, который мы добавили ранее, чтобы он выглядел так:
.onDelete(perform: self.deleteItem)
Вот и все, если вы создадите и запустите приложение, вы сможете удалять элементы из представления List
.
Окончательный исходный код
struct ContentView: View { @State var listItems = ["Item 1", "Item 2", "Item 3"] var body: some View { List { ForEach(listItems, id: \.self) { (item) in Text(item) }.onDelete(perform: self.deleteItem) } } private func deleteItem(at indexSet: IndexSet) { self.listItems.remove(atOffsets: indexSet) } }
Первоначально опубликовано на https://programmingwithswift.com 25 августа 2019 г.