【问题标题】:.onDelete not working in sorted ForEach - SwiftUI.onDelete 在排序的 ForEach 中不起作用 - SwiftUI
【发布时间】:2020-07-13 19:29:54
【问题描述】:
我不知道为什么这不起作用。我一直都是这样做的,唯一的区别是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)
}
帮助!谢谢
【问题讨论】:
标签:
ios
swift
foreach
swiftui
swiftui-list
【解决方案1】:
你得到了一个数组的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 类中。
【解决方案2】:
我也有同样的问题。
在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,我也在那里添加了它。一切正常!