我不知道为什么这不起作用。我一直以相同的方式进行操作,唯一的区别是sorted
方法。
ForEach(userData.fruits_and_vegetables.sorted { $0.item < $1.item}) { grocery in
DetailCardView(item: grocery.item, itemCount: grocery.count)
}.onDelete { (offset) in
self.userData.fruits_and_vegetables.remove(atOffsets: offset)
}
帮助!谢谢
答案 0 :(得分:0)
您获得offset
的一个数组,但尝试将其应用于另一个数组……真的行不通。
相反,应该这样做,例如
let sorted = userData.fruits_and_vegetables.sorted { $0.item < $1.item}
...
ForEach(sorted) { grocery in
DetailCardView(item: grocery.item, itemCount: grocery.count)
}.onDelete { (offset) in
for i in offset {
if let found = self.userData.fruits_and_vegetables.firstIndex(where: { $0 == sorted[i] }) {
self.userData.fruits_and_vegetables.remove(at: found)
}
}
}
最好将sorted
和onDelete
的内容移到您的userData
类中。
答案 1 :(得分:0)
我有同样的问题。
在remove
函数中,我添加了相同的排序:
func remove(at offsets: IndexSet) {
for index in offsets {
let grocery = userData.fruits_and_vegetables.sorted { $0.item < $1.item }[index]
grocery.delete // Your delete method
}
}
在我的代码中,我还添加了一个.filter
。一切正常!