核心数据谓词——有什么好处?

Core data predicates - what’s the benefit?

我最近开始学习 Core Data,我完全明白为什么管理可观察对象会带来巨大的好处。

我不清楚的部分是为什么谓词被认为如此强大,而在我看来,它们只是 sqlishy 片段。 这根本不是问题,因为它还有助于编写可读代码。 但是这些片段包含字符串形式的对象属性,如

„myProperty == @d“

如果我重构我的实体以便重命名 属性,我现在必须遍历每个 FetchRequest 并修复谓词字符串。 如果不是,错误不是在构建时发现的,而是在运行时发现的。

这至少是我的理解(这可能是一种误解),这让我很烦恼,所以我想就这个话题寻求见解或建议。

“片段”,如您所说,可以 包含 属性 个名称,但您不必使用 属性 个名称作为文字字符串。您可以使用 %K 占位符替换相关的 属性 名称,并使用 #keyPath 功能从(编译器验证的)属性 名称创建字符串:

NSPredicate(format:"%K == %@",#keyPath(MyEntityClass.myProperty),...)

有关使用 #keyPath 的讨论,请参阅 here for further information on the %K placeholder, and here

所以不用担心 - 你可以确保你的谓词在编译时得到验证并且更容易睡觉。