Swift #谓词在参数上使用函数

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

是否可以使用#Predicate,其表达式的一部分调用函数(尝试将该谓词传递到

SwiftData Query
):

func myPredicate(year: Int, month: Int) -> Predicate<MyObj> {
   #Predicate<MyObj> { obj in
     let components = Calendar.current.dateComponents([.year, .month], from: obj.date))
     return components.year == year && components.month == month
   }
}

在这种情况下,我收到一个错误:

Predicate body may only contain one expression
。我尝试将其移动到另一个静态函数,如下所示:

extension MyObj {
  static func checkDate(date: Date, year: Int, month: Month) {
    let components = Calendar.current.dateComponents([.year, .month], from: obj.date))
    return components.year == year && components.month == month
  }
}

但现在我得到了

The checkDate function is not supported in this predicate

除了将日期存储为单独的年份和月份字段之外,还有其他方法吗?

谢谢

swift predicate swift-data
1个回答
0
投票

您不能从谓词调用函数,文档

中有您可以使用哪些操作的列表

您可以根据给定参数计算日期间隔,然后在谓词中使用这些日期值

static func predicate(year: Int, month: Int) -> Predicate<MyObj> {
    let minDate = Calendar.current.date(from: DateComponents(year: year, month: month))!
    let maxDate = Calendar.current.date(byAdding: .month, value: 1, to: minDate)!

    return #Predicate<MyObj> { object in
        object.date >= minDate && object.date < maxDate
    }
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.