以下代码使我不舒服。
struct HistoryView: View {
@ObservedObject var history: History
var body: some View {
List {
ForEach(history.getSessions()) { sess in
Text("Duration: \(sess.duration)")
}.onDelete(perform: self.onDelete)
}
}
private func onDelete(_ indexSet: IndexSet) {
...
}
}
问题在于History
是非常异步的事情。这是连接到CloudKit的模型。它可能在后台获取更新。理想情况下,如果它进行更新,则此View
将立即更新,并且索引仍然是准确的,但是我更希望获得一组要删除的 identifiers 而不是一组索引。有没有办法做到这一点?注意:Identifiable
要求这些“历史会话”符合ForEach
,因此它们都具有ID。就我而言,它们是UUIDs
。
答案 0 :(得分:0)
也许这有助于在删除所选索引时锁定历史记录会话:
struct HistoryView: View {
@ObservedObject var history: History
private let syncQueue = DispatchQueue(label: "com.xxx.yyy.zzz")
var body: some View {
List {
ForEach(history.getSessions()) { sess in
Text("Duration: \(sess.duration)")
}.onDelete(perform: self.onDelete)
}
}
private func onDelete(_ indexSet: IndexSet) {
syncQueue.sync {
// do the delete
}
}
}