我无法使用字符串作为NSPredicate的直接参数来获取数据。这两者之间有什么区别吗,
//Working case
fetchRequest.predicate = NSPredicate(format: "role == %@","GK")
在上面的例子中,我能够使用谓词来获取数据。
//Not Working
predicateString = String(format:"role == %@","GK")
fetchRequest.predicate = NSPredicate(format: predicateString)
这里我无法获取数据。
上述两种情况之间的唯一区别是我使用String变量来定义谓词。这有什么不对?
答案 0 :(得分:2)
当实例化NSPredicate时,%@被字符串变量替换时,字符串变量会自动被引号括起来,因此在您的示例中,谓词变为role == 'GK'
如果你想使用String(格式:...),你需要自己添加引号,但在我看来,最好直接使用NSPredicate(格式:...)来避免这样的问题
答案 1 :(得分:1)
NSPredicate
的格式如下,它需要格式,格式包含均衡器。
NSPredicate(format: <String>, <args: CVarArg...>)
let predicate1 = NSPredicate(format: "role == %@", "GK")
在这里,如果您要查看predicate1.predicateFormat
,那么您将获得:
“role == \”GK \“”,
将角色"GK"
置为角色,并在array
中返回结果。
但是,
let predicateString = String(format:"role == %@","GK")
let predicate2 = NSPredicate(format: predicateString)
你用简单的字符串替换了均衡器,它无法返回任何内容。您可以查看将返回的predicate1.predicateFormat
:
“role == GK”
如果您想使用字符串,可以使用"role == 'GK'"
。
希望它会有所帮助。