swift 过滤具有关系(一对多)的实体,即具有等于某个元素的元素的列表

dy1byipe  于 2023-04-10  发布在  Swift
关注(0)|答案(1)|浏览(96)

大家下午好

给出

常规(实体)
关系:工作日,目的地:工作日,倒数:例行程序
工作日(实体)
int(Integer)
关系:例程,目的地:常规,反向:平日

目标

过滤具有关系weekdays的所有例程,该关系包含其属性int等于您指定的Integer64的Weekday。

迄今为止的努力

// Constant
let weekDay = 1

// Attempt 1
let attemptedNSPredicate = NSPredicate(format: "ANY weekdays.int == %@", weekDay)

// Attempt 2
let attemptedNSPredicate = NSPredicate(format: "SUBQUERY(weekdays, weekday, weekday.int == %@", weekday)

// Attempt 3
let attemptedNSPredicate = NSPredicate(format: "ANY %K.int == %@", \Routine.weekdays, weekday)

您对此问题的解决方案是什么

func yourSolution(_ solution: NSPredicate) -> FetchRequset {
     FetchRequest<Routine>(
          entity: Routine.entity(),
          sortDescriptors: [],
          predicate: solution
     )
)
hxzsmxv2

hxzsmxv21#

如果weekdays是一个Int 64属性,那么你应该告诉格式像这样使用它-〉%ld而不是%@。
所以#3将是正确的一个使用这个小修改:

let attemptedNSPredicate = NSPredicate(format: "ANY %K.int == %ld", \Routine.weekdays, weekday)

在你的例子中,这种关系并没有太大的意义。工作日是一个有限的集合。所以将它作为一个枚举并直接将其用作例程的属性会使事情变得更简单,更快。

相关问题