Есть ли способ удалить все элементы списка в SwiftUI? Я использую ForEach()
внутри List()
, и мне нужна кнопка «Очистить все», чтобы удалить все элементы из списка. Есть ли способ сделать это?
struct SwiftUIView: View {
@State var filters : [filter] = [filter(name: "new"), filter(name: "old"), filter(name: "some")]
@State var afterFilters : [someFilter] = []
var body: some View {
List{
ForEach(0..<self.filters.count, id:\.self){ i in
filterRepresent(string: self.$afterFilters[i].filter.name, isOn: self.$afterFilters[i].isOn)
}
}.onAppear {
for filter in self.filters {
self.afterFilters.append(someFilter(filter: filter))
}
}
}
}
struct filterRepresent : View {
@Binding var string : String
@Binding var isOn : Bool
var body : some View {
HStack{
Text(string)
Toggle("",isOn: $isOn)
}
}
}
struct filter {
var name : String
var isOn : Bool
init(name: String){
self.name = name
self.isOn = false
}
}
struct someFilter : Identifiable{
var id : Int
var filter : filter
var isOn : Bool
init(filter : filter){
self.id = Int.random(in: 0...100000)
self.filter = filter
self.isOn = filter.isOn
}
}
Как вы можете видеть, в приведенном выше примере я использую @Binding для изменения данных, которые я храню, в зависимости от состояния Toggle, я хочу иметь кнопку, которая удаляет весь список (в реальном приложении данные в список загружается со стороны сервера во временный массив, как показано выше), когда я делаю это с помощью .removeall (), я получаю ошибку вне индекса.
Кнопка, которую я использую:
Button(action: {
self.afterFilters.removeAll()
}, label: {
Text("Clear all").font(Font.custom("Quicksand-Medium", size: 15))
})
Ошибка, которую я получаю: Неустранимая ошибка: индекс вне допустимого диапазона: файл /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-1103.2.25.13/swift/stdlib/public/core/ContiguousArrayBuffer.swift, строка 444