不要使用字符串插值来构建谓词格式,它是非常
很难得到正确的必要引用。例如,这会起作用(注意附加的
单引号):
let uuid = "BD1698EE-C57D-4B8D-9D54-1D4403B2136F"
print(NSPredicate(format: "id == '\(uuid)'"))
// id == "BD1698EE-C57D-4B8D-9D54-1D4403B2136F"
但如果 uuid 字符串包含单引号也会失败。
最好使用%@ var arg 替换字符串:
let uuid = "BD1698EE-C57D-4B8D-9D54-1D4403B2136F"
print(NSPredicate(format: "id == %@", uuid))
// id == "BD1698EE-C57D-4B8D-9D54-1D4403B2136F"
在您的情况下(假设 shoppingListModel.Id 是 String 或 NSString):
let resultPredicateShoppingListDetail = NSPredicate(format: "Id == %@", shoppingListModel.Id)
更好的是,使用%K keypath var arg 替换和#keyPath
插入正确密钥路径的编译器指令:
let resultPredicateShoppingListDetail = NSPredicate(format: "%K == %@",
#keyPath(ShoppingList.Id), shoppingListModel.Id)
有关谓词中%K 和%@ 的更多信息,请参阅
“Predicate Format String Syntax” 在“谓词编程指南”中。