NSPredicate 格式动态使用 属性 名称

NSPredicate format dynamically use property name

我使用这个谓词从 CoreData 中获取对象:

NSPredicate.init(format: "id in %@", ids)

所以,我的 class 有 属性 叫作 "id"。

是否可以使用 属性 的动态名称而不是硬编码 "id"?

问题是,至少对我而言,如果我更改 属性 的名称,我将需要更改所有使用它的谓词。

相反,我想使用

NSPredicate.init(format: "%@ in %@", #keyPath(MyClass.id), ids)

这给了我一个谓词 "id" in <listOfIDs>,而要让它工作它需要 id in <listOfIDs>

我知道这很奇怪 'problem',但我真的不想在这种情况下使用任何硬编码的属性名称...

是的,这是可能的,你只需要使用 "%K" 而不是 "%@"

NSPredicate.init(format: "%K in %@", #keyPath(MyClass.id), ids)