簡體   English   中英

從 SwiftUI 中的核心數據中獲取特定年份數據的謂詞

[英]Predicate for fetching the data for a particular year from Core Data in SwiftUI

我正在開發一個 SwiftUI 預算管理應用程序,用於跟蹤用戶的支出和收入。 該應用程序使用 CoreData 來管理數據管理。 托管 object 的日期是一個財產。

我使用下面的獲取請求來獲取數據

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

這將提供分組數據,例如 2021 年 9 月的費用

管理的object model如下

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 {

}

我想根據年份過濾數據。 例如,我想顯示特定年份的費用。 我如何為此編寫謂詞?

要查找特定年份的開始點和結束點, Calendar有一個dateInterval方法。 例如:

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)

如果您想查找特定年份,而不是使用今天的日期作為起點,您可以創建一個年份與您要篩選的年份相匹配的日期,依此類推。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM