.onDelete在排序的ForEach中不起作用-SwiftUI

时间:2020-04-01 22:18:46

标签: ios swift foreach swiftui swiftui-list

我不知道为什么这不起作用。我一直以相同的方式进行操作,唯一的区别是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)
}

帮助!谢谢

2 个答案:

答案 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)
        }
    }
}

最好将sortedonDelete的内容移到您的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。一切正常!