在SwiftUI中删除整个列表

在SwiftUI中删除整个列表,swiftui,swiftui-list,Swiftui,Swiftui List,有没有办法删除SwiftUI中的所有列表项? 我在List()中使用ForEach(),我希望有一个“全部清除”按钮来删除列表中的所有项目,有办法吗 struct SwiftUIView: View { @State var filters : [filter] = [filter(name: "new"), filter(name: "old"), filter(name: "some")] @State var a

有没有办法删除SwiftUI中的所有列表项? 我在
List()
中使用
ForEach()
,我希望有一个“全部清除”按钮来删除列表中的所有项目,有办法吗


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
    }
}
我得到的错误是:
致命错误:索引超出范围:file/Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-1103.2.25.13/swift/stdlib/public/core/contiguousarrarybuffer.swift,第444行

您必须清理模型,视图将自动刷新

下面是一个简单的演示:

struct DemoCleanUpList: View {

    @State private var persons = ["Person 1", "Person 2", "Person 3"]

    var body: some View {
        VStack {
            Button("CleanUp") { self.persons.removeAll() }
            List {
                 ForEach(persons, id: \.self) { person in
                    Text(person)
                }
            }
        }
    }
}

所以,出于某种原因,当我这样做的时候,我会得到一个索引外错误,为什么会这样呢?我使用带有数组计数的ForEach循环要修改ForEach的内容,需要使用ForEach动态构造函数。有关详细信息,请参阅。我正在使用构造函数,就像您发送的示例一样,非常奇怪
struct DemoCleanUpList: View {

    @State private var persons = ["Person 1", "Person 2", "Person 3"]

    var body: some View {
        VStack {
            Button("CleanUp") { self.persons.removeAll() }
            List {
                 ForEach(persons, id: \.self) { person in
                    Text(person)
                }
            }
        }
    }
}