我只是想分享我有一个核心数据应用程序,其中包含以下内容:
每个按钮都是一个按钮,用户可以按下该按钮来过滤数据,例如(从左到右):全部、收件箱、存档、更多、好、坏、重要。您还会注意到,每个按钮都有一个计数器。
在我的 ViewModel 中,我有一个函数来对每个函数进行计数,该函数在应用程序的 onAppear() 中被调用
func countItem() -> (countTotal: Int, countArchive: Int, countGood: Int, countEvil: Int, countImportant: Int) {
let request: NSFetchRequest<ThoughtEntity> = ThoughtEntity.fetchRequest()
request.predicate = NSPredicate(format: "thoughts != %@", "")
let items1 = (try? manager.container.viewContext.fetch(request)) ?? []
let countTotalPredicate = items1.count
request.predicate = NSPredicate(format: "isArchive == true")
let items2 = (try? manager.container.viewContext.fetch(request)) ?? []
let countArchivePredicate = items2.count
request.predicate = NSPredicate(format: "type CONTAINS %@", "good")
let items3 = (try? manager.container.viewContext.fetch(request)) ?? []
let countGoodPredicate = items3.count
request.predicate = NSPredicate(format: "type CONTAINS %@", "evil")
let items4 = (try? manager.container.viewContext.fetch(request)) ?? []
let countEvilPredicate = items4.count
request.predicate = NSPredicate(format: "type CONTAINS %@", "important")
let items5 = (try? manager.container.viewContext.fetch(request)) ?? []
let countImportantPredicate = items5.count
return (countTotalPredicate, countArchivePredicate, countGoodPredicate, countEvilPredicate, countImportantPredicate)
}
代码运行良好。
我想知道是否有更好的方法来做到这一点,而不是从数据库中获取 5 次?也许获取的“成本”很低,所以这并不重要,但我想知道是否有更好、更有效的方法?
您可以在 viewContext 上使用
count(for:)
方法。
let request: NSFetchRequest<ThoughtEntity> = ThoughtEntity.fetchRequest()
request.predicate = NSPredicate(format: "thoughts != %@", "")
let countTotalPredicate = try? manager.container.viewContext.count(for: request)) ?? 0