如何解决删除SwiftUI中的整个列表
是否可以删除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状态存储的数据,我想要一个按钮来删除整个列表(在实际应用中,数据列表中的内容从服务器端上传到temp数组中,就像上面一样),当我使用.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行
解决方法
您必须清理模型,视图才会自动刷新。
这是一个简单的演示:
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)
}
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。