【发布时间】:2021-04-02 08:06:18
【问题描述】:
我有一个函数,它返回一个项目是否存在于 3 个 CoreData 实体中的 1 个中,具体取决于传递给该函数的 list: CoreDataList enum 参数:
static func listContains(word: String, list: CoreDataList) -> Bool {
var reply = false
switch list {
case .itemsSearched:
let request : NSFetchRequest<ItemsSearched> = ItemsSearched.fetchRequest()
case .itemsAdded:
let request : NSFetchRequest<ItemsAdded> = ItemsAdded.fetchRequest()
case .itemsFinished:
let request : NSFetchRequest<ItemsFinished> = ItemsFinished.fetchRequest()
}
do {
request.predicate = NSPredicate(format: "item == %@", word)
let fetchedResults = try context.fetch(request)
if fetchedResults.count == 1 {
reply = true
}
} catch {
print ("fetch task failed", error)
}
return reply
}
这里的问题是 let request 不能在 switch 语句之前初始化,因为它的类型将取决于 switch 的结果。
因此,如果不对每种情况重复整个do catch block,我就找不到执行此功能的方法,这将导致重复相同的代码三次。另一种选择是分成三个不同的函数,但这会带来相同的代码重复问题。
【问题讨论】:
-
在切换前定义获取请求。