NSPredicate格式动态使用属性名称

时间:2017-06-14 21:22:33

标签: ios swift nspredicate

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

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

所以,我的班级有“id”这个属性。

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

问题,至少在我看来,如果我更改了我的属性名称,我需要更改使用它的所有谓词。

相反,我想要使用像

这样的东西
"id" in <listOfIDs>

这为我提供了一个谓词id in <listOfIDs>,而要使其有效,则需要for data in [ ["USERNAME", "username", CustomException], ["PASSWORD", "password", CustomException] ]: env_var = os.environ.get(data[0]) if env_var: setattr(self, data[1], env_var) else: # Should work, cannot check due to not having actually Python installed. raise data[2]("Environment variable %s not set" % data[0])

我理解这是一个非常奇怪的'问题',但我真的不喜欢在这种情况下使用任何硬编码属性的名字......

1 个答案:

答案 0 :(得分:4)

是的,您可以使用"%K"代替"%@"

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