gpt4 book ai didi

ios - 如何为所有实体编写一个简单的通用核心数据函数

转载 作者:行者123 更新时间:2023-11-28 09:52:32 25 4
gpt4 key购买 nike

编辑:专门使用 Swift 泛型

我想要一个 countAll() 函数用于我的所有实体,我希望通过编写一个通用函数来实现这一点。

以下处理名为“Event”的实体,但我想处理名为“T”的实体。

我不确定如何编写这样的通用函数。有人可以帮忙吗?

func countAll() -> Int {
let request: NSFetchRequest<Event> = Event.fetchRequest()
do {
return try persistentContainer.viewContext.count(for: request)
} catch {
XCTAssert(false, "Core Data failed to fetch with error: " + error.localizedDescription)
return 0
}
}

这是我在遇到错误之前能得到的最接近的结果:

func count<T: NSFetchRequestResult>(entityName: String) -> Int {
let request = NSFetchRequest<T>(entityName: entityName)
do {
return try persistentContainer.viewContext.count(for: request)
} catch {
XCTAssert(false, "Core Data failed to fetch with error: " + error.localizedDescription)
return 0
}
}

最佳答案

您可以传递托管对象类而不是 NSFetchRequestResult到通用函数:

func countAll<T: NSManagedObject>(entity: T.Type) -> Int {
let entityName = String(describing: entity)
let request = NSFetchRequest<T>(entityName: entityName)
do {
return try thePersistentContainer.viewContext.count(for: request)
} catch {
print(error.localizedDescription)
return 0
}
}

let count = countAll(entity: YourEntity.self)

另一种方法是在 NSManagedObject 上定义一个扩展方法(类似于 How can I create instances of managed object subclasses in a NSManagedObject Swift extension? ):

extension NSManagedObject {

class func countAll() -> Int {
let eName = String(describing: self)
let request = NSFetchRequest<NSFetchRequestResult>(entityName: eName)
do {
return try thePersistentContainer.viewContext.count(for: request)
} catch {
print(error.localizedDescription)
return 0
}
}
}

let count = YourEntity.countAll()

关于ios - 如何为所有实体编写一个简单的通用核心数据函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44365005/

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