Swift 领域在过滤器中添加日期

Swift Realm add days to date in filter

我想根据日期和天数过滤 Swift 中的一些 Realm 结果。我有一个具有以下属性的领域对象:

class Route: Object, ObjectKeyIdentifiable, Codable {
    @Persisted(primaryKey: true) var id: Int?
    @Persisted var status: String?
    @Persisted var bucket_name: String?
    @Persisted var frequency_days: Int?
    @Persisted var last_record_date: Date?
}

我想做的是在筛选结果时将 frequency_days 中的天数添加到 last_record_date

在我看来,我想做这样的事情(我知道你不能将 Int 添加到 Date,但这只是为了说明我的目标):

self.filteredRoutes = self.routes.where {
    ([=12=].last_record_date + [=12=].frequency_days < Date())
}

我在 filter section of the docs

中也找不到任何内容

我什至不确定这是否可行,但如果有人有一些想法让这个工作或变通,我们将不胜感激。

我建议只存储您要查询的实际日期。

您知道 last_record_date 和 frequency_days 那么为什么不将它们加在一起并将其存储为日期。

例如;

假设 last_record_date 是 2022-04-01,frequency_days 是 10(天)。

如果将天数添加到 last_record_date,结果日期为 2022-04-10(包括 1 日)。

因此将其存储在 target_date 属性: 2022-04-10

只要频率日期或 last_record_date 发生变化,您只需计算一个新的目标日期并存储即可。

我建议向您的 Realm class 添加一个函数来为您完成此操作,如果您需要存储 frequency_days 和 last_record_date,您也可以这样做。

class Route: Object, ObjectKeyIdentifiable, Codable {
    @Persisted(primaryKey: true) var id: Int?
    @Persisted var frequency_days: Int?
    @Persisted var last_record_date: Date?

    @Persisted var target_date: Date?

    func changeFrequencyDays(newDayCount: Int) {
        self.frequency_days = newDayCount

        //do some math to add newDayCount to the last_record_date
        self.target_date = //new calculated date
    }

    func changeLastRecordDate(lastRecordDate: Date) {
        self.last_record_date = lastRecordDate

        //do some math to add frequency_days to the new lastRecordDate
        self.target_date = //new calculated date
    }
}

有了上面的内容,任何时候 frequency_days 需要更新或 last_record_date 发生变化,调用适当的函数,属性 将随着更新 target_date 属性.