gpt4 book ai didi

具有通用类型的快速扩展函数 - isEmpty for FetchedResults

转载 作者:行者123 更新时间:2023-11-28 06:00:44 24 4
gpt4 key购买 nike

我在实现扩展函数以确定实体是否包含任何结果时遇到了一些问题。最终目标是确定实体是否有结果,如果没有,则在应用程序启动时将其播种(对于某些实体,如国家/地区列表等...)

这是我能够得到的地方,但是 swift 编译器不满意;错误:类型“T”不符合协议(protocol)“NSFetchRequestResult”

extension NSManagedObject {
func isEmpty<T>(context: NSManagedObjectContext, entityName: String, entityType: T.Type) -> Bool {
do {
let fetch = NSFetchRequest<T>(entityName: entityName)
let count = try context.fetch(fetch)
return count == 0 ? true : false
} catch {
return true
}
}
}

最佳答案

您必须将 T 限制为 NSManagedObject 子类。如果您只对对象数量:

func isEmpty<T: NSManagedObject>(context: NSManagedObjectContext, entityName: String, entityType: T.Type) -> Bool {
do {
let fetch = NSFetchRequest<T>(entityName: entityName)
let count = try context.count(for: fetch)
return count == 0
} catch {
return true
}
}

但实际上你不需要那个参数:

func isEmpty(context: NSManagedObjectContext, entityName: String) -> Bool {
do {
let fetch = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)
let count = try context.count(for: fetch)
return count == 0
} catch {
return true
}
}

作为性能改进,您还可以设置

        fetch.fetchLimit = 1

备注:声明

return someBooleanCondition ? true : false

可以(并且应该)总是简化为

return someBooleanCondition

关于具有通用类型的快速扩展函数 - isEmpty for FetchedResults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49844507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com