谓词,用于从SwiftUI的核心数据中获取特定年份的数据



我正在开发一个SwiftUI预算管理应用程序,它跟踪用户的费用和收入。应用程序使用CoreData来管理数据管理。托管对象有date作为一个属性。

我使用下面的fetch请求来获取数据

@SectionedFetchRequest(sectionIdentifier: Expence.itemMonthYearShort, sortDescriptors: [SortDescriptor(Expence.date, order: .forward)])
private var expences : SectionedFetchResults<String, Expence>

这将给出分组数据,如2021年9月的费用

管理对象模型如下

extension Expence {

@nonobjc public class func fetchRequest() -> NSFetchRequest<Expence> {
return NSFetchRequest<Expence>(entityName: "Expence")
}

@NSManaged public var amount: Double
@NSManaged public var date: Date
@NSManaged public var id: UUID?
@NSManaged public var type: Int16
@NSManaged public var title: String?
@NSManaged public var note: String?
@NSManaged public var category: Category?

public var wrappedNotes : String{
note ?? ""
}
public var wrappedTitle : String{
title ?? ""
}

@objc var itemMonthYear : String{
return date.formatted(.dateTime.month(.wide).year())
}
@objc var itemMonthYearShort : String{
return date.formatted(.dateTime.month(.abbreviated).year())
}

@objc var itemMonthYearDescending : String{
return date.formatted(.dateTime.month(.wide).year()) + " "
}

@objc var itemMonth : String{
return date.formatted(.dateTime.month(.abbreviated
))
}
@objc var itemYear : String{
return date.formatted(.dateTime.year())
}
}
extension Expence : Identifiable {
}

我想根据年份筛选数据。例如,我想显示某一年的费用。我怎么写它的谓词呢?

要查找特定年份的开始和结束点,CalendardateInterval方法。例如:

let today = Date.now // => November 18, 2022
let thisYear = Calendar.current.dateInterval(of: .year, for: today)! // NB: note this is an Optional
let predicate = NSPredicate(format: "date >= %@ AND date < %@", thisYear.start as NSDate, thisYear.end as NSDate)

如果您想查找一个特定的年份,而不是使用今天的日期作为起始点,您可以创建一个年份与您想要过滤的年份匹配的日期,依此类推。

相关内容

  • 没有找到相关文章

最新更新