swift - Core Data 通用获取请求
问题描述
我使用以下代码从核心数据实体一中获取数据:
func fetchDataOne() {
let fetchRequest: NSFetchRequest<One> = One.fetchRequest()
do {
fetchRequest.predicate = NSPredicate(format: "questionWasShown == %@", NSNumber(value: false))
// Save result to result array
let result = try PersistentService.context.fetch(fetchRequest)
if result.count > 0 {
// do some stuff
}
}
我计划添加更多实体(20-30)。很难维护 30 个不同的 fetch 请求。我想重写这一行
let fetchRequest: NSFetchRequest<One> = One.fetchRequest()
这样我就可以使用通用代码。我想实现这样的目标
func fetchData(entity: T) {
...
let fetchRequest: NSFetchRequest<T> = T.fetchRequest()
...
}
在核心数据中可能吗?
解决方案
正如 Ryan 在上面的评论中所说,您必须让编译器知道 T 具有 fetchRequest 方法,如下所示:
func fetchData<T:NSManagedObject>(entity: T.Type) {
let fetchRequest = T.fetchRequest()
do {
fetchRequest.predicate = NSPredicate(format: "questionWasShown == %@", NSNumber(value: false))
let result = try CoreDataHelper.managedObjectContext.fetch(fetchRequest)
if result.count > 0 {
// do some stuff
}
} catch {
}
}
用法:
self.fetchData(entity: One.self)