我只是想分享我有一个Core Data应用程序,包含以下内容:

header bar

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

在我的视图模型中,我有一个函数来计算每个函数,在应用程序的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次?也许取东西的"成本"很低,所以没关系,但我想知道是否有更好、更有效的方法来做到这一点?

推荐答案

您可以在viewContent上使用count(for:)方法仅返回计数,而不是所有实体.

let request: NSFetchRequest<ThoughtEntity> = ThoughtEntity.fetchRequest()
        
request.predicate = NSPredicate(format: "thoughts != %@", "")
let countTotalPredicate = try? manager.container.viewContext.count(for: request)) ?? 0

Swift相关问答推荐

NSApplication是否需要NSApplicationDelegate?

仅当单击UIButton时才调用计时器函数

从`compactMap()`闭包返回`nil`未通过结果类型判断

macOS 的窗口框架中使用的真实类型和真实类型是什么?

Swift Combine:如何在保留发布者结果顺序的同时进行收集?

String(validatingUTF8:) 和 String(utf8String:) 之间有区别吗?

状态变量更改后,SwiftUI 视图不会更改

如何在 SwiftUI 中用图像替换占位符文本?

如何在 SwiftUI 中将图像传递到 2 个视图

SwiftUI - Select 器没有 Select 值

试图同时实现两个混合过渡

如何让 UIKit 挤压你的视图,使其适合屏幕

如何将使用\u{ea12}创建的 Swift 字符串转换回其十六进制值/字符串ea12?

Swift中的分段错误

如何删除桥头而不出错?

在 Swift 4 中,如何删除基于块的 KVO 观察者?

如何从 UITableViewCell 类中引用 UITableViewController?

使用 ARAnchor 插入 node 和直接插入 node 有什么区别?

Swift 2.0 按属性对对象数组进行排序

在 Swift 中从服务器播放视频文件