多次提取以计算核心数据中的记录

问题描述 投票:0回答:1

我只是想分享我有一个核心数据应用程序,其中包含以下内容:

header bar

每个按钮都是一个按钮,用户可以按下该按钮来过滤数据,例如(从左到右):全部、收件箱、存档、更多、好、坏、重要。您还会注意到,每个按钮都有一个计数器。

在我的 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 次?也许获取的“成本”很低,所以这并不重要,但我想知道是否有更好、更有效的方法?

swiftui core-data nspredicate
1个回答
0
投票

您可以在 viewContext 上使用

count(for:)
方法。

let request: NSFetchRequest<ThoughtEntity> = ThoughtEntity.fetchRequest()
        
request.predicate = NSPredicate(format: "thoughts != %@", "")
let countTotalPredicate = try? manager.container.viewContext.count(for: request)) ?? 0
© www.soinside.com 2019 - 2024. All rights reserved.