您将如何等待上下文更新后再继续?
import SwiftData
@State var selectedItem: Item?
@Query var items: [Item]
func addItem() {
let item = Item()
context.insert(item)
selectedItem = item
print(items)
}
结果:
[]
想要的:
[Item]
func deleteItem(at offsets: IndexSet) {
for index in offsets {
context.delete(items[index])
}
if items.isEmpty || items.contains(where: { $0.id == selectedItem?.id }) == false {
selectedItem = nil
}
}
由于上下文在
if
语句时未更新,因此它永远不会按预期运行。
为什么不先获取所选项目的索引,然后清除选择(如果它是已删除对象的一部分)。
if let selectedIndex = items.firstIndex(where { $0.id == selectedItem?.id }, offsets.contains(selectedIndex {
selectedItem = nil
}
// delete loop...