【问题标题】:.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)
            }
        }
    }
    

    最好将sortedonDelete 的内容移动到您的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,我也在那里添加了它。一切正常!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-04
        • 1970-01-01
        • 1970-01-01
        • 2021-02-18
        • 1970-01-01
        • 2015-03-25
        • 2014-07-01
        • 1970-01-01
        相关资源
        最近更新 更多