我使用此谓词从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])
我理解这是一个非常奇怪的'问题',但我真的不喜欢在这种情况下使用任何硬编码属性的名字......
答案 0 :(得分:4)
是的,您可以使用"%K"
代替"%@"
。
NSPredicate.init(format: "%K in %@", #keyPath(MyClass.id), ids)