我构建了一个 Swift 函数,通过特定 SwiftData 类的 id 获取对象,效果很好。现在我尝试将其重建为通用函数以与不同的类一起使用。我的代码如下所示:
func getObjectByID<T: PersistentModel>(context: ModelContext, id: Int) -> T? {
do {
let predicate = #Predicate<T> {
id == $0.id
}
let descriptor = FetchDescriptor<T>(predicate: predicate)
let objects = try context.fetch(descriptor)
return objects.first
} catch {
return nil
}
}
出现 2 个错误:
为什么会出现这些错误以及如何解决这些问题?
我尝试过(上下文:ModelContext,id:任何 BinaryInteger)但没有成功
首先,
id
类型的PersistentModel
属性是PersistentIdentifier
。所以函数签名应该是
func getObjectByID<T: PersistentModel>(context: ModelContext, id: PersistentIdentifier) -> T?
这修复了编译错误,但您可以使用函数来代替使用带谓词的 fetch
model(for:)
func getObjectByID<T: PersistentModel>(context: ModelContext, id: PersistentIdentifier) -> T? {
context.model(for: id) as? T
}
或者完全跳过这个自定义函数并直接调用
model(for:)
。