问题描述
我最近开始学习 Core Data,我完全明白为什么管理可观察对象会带来巨大的好处。
我不清楚的部分是为什么谓词被认为如此强大,而在我看来,它们只是简单的片段。
这根本不是问题,因为它也使代码可读。
但是片段包含字符串形式的对象属性,如
„myProperty == @d“
如果我重构我的实体以便重命名属性,我现在必须遍历每个 FetchRequest 并修复谓词字符串。
如果没有,错误不是在构建时发现,而是在运行时发现。
这至少是我的理解(这可能是一种误解),这让我很恼火,我想就此主题寻求见解或建议。
解决方法
“片段”,正如您所说的那样,可以包含属性名称,但您不必将属性名称用作文字字符串。您可以改为使用 %K
占位符替换相关属性名称,并使用 #keyPath
功能从(编译器验证的)属性名称创建字符串:
NSPredicate(format:"%K == %@",#keyPath(MyEntityClass.myProperty),...)
有关 %K
占位符的详细信息,请参阅 here,有关使用 #keyPath
的讨论请参阅 here。
所以不必生气 - 您可以确保您的谓词在编译时得到验证并且更容易入睡。