【发布时间】:2018-10-30 04:44:52
【问题描述】:
我使用以下代码从核心数据实体一中获取数据:
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()
...
}
Core Data 有可能吗?
【问题讨论】:
-
是的。你需要的是让编译器知道
T有fetchRequest()。 -
冷酷无情,请提供示例代码?
-
最简单的方法是使用
protocol。创建一个具有fetchRequest()函数的协议,并将该协议用作fetchData(entity: #protocol)中的参数。