使用 SwiftData 时等待上下文更新

问题描述 投票:0回答:1

您将如何等待上下文更新后再继续?

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
语句时未更新,因此它永远不会按预期运行。

swift swift-data
1个回答
0
投票

为什么不先获取所选项目的索引,然后清除选择(如果它是已删除对象的一部分)。

if let selectedIndex = items.firstIndex(where { $0.id == selectedItem?.id }, offsets.contains(selectedIndex {
    selectedItem = nil
} 

// delete loop...
© www.soinside.com 2019 - 2024. All rights reserved.