使用 SwiftData 进行并发(ModelActor)

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

我尝试使用下一个代码在后台线程上执行一些 SwiftData 工作,当我将“严格并发检查”设置为“完成”时,我收到一条警告消息。 “列表项”是一个 SwiftData 模型。 代码:

@ModelActor
actor DataModelActor {
    
    func configureNewListItem() -> ListItem {
        let newListItem = ListItem(index: 0, pinIndex: 0)
        modelContext.autosaveEnabled = false
        modelContext.insert(newListItem)
        return newListItem
    }
}

交战信息:

enter image description here

我从以下位置获得“modelContext”:

@Environment(\.modelContext) private var modelContext

如何修复警告消息(我不想忽略它)或者是否有其他方法通过避免主线程来使用 SwiftData?请。

swift swift-data swift-concurrency
1个回答
0
投票

@Model
类不符合
Sendable
,所以你不能将它们传递到 Actor 边界。但它们的标识符是这样你可以传递对象的 id。

func configureNewListItem() -> ListItem.ID {
    let newListItem = ListItem(index: 0, pinIndex: 0)
    modelContext.autosaveEnabled = false
    modelContext.insert(newListItem)
    return newListItem.id
}
© www.soinside.com 2019 - 2024. All rights reserved.