Не используйте строковую интерполяцию для построения формата предиката, очень трудно получить правильное цитирование правильно.Например, это будет работать (обратите внимание на дополнительные одинарные кавычки):
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 substitution и директива компилятора #keyPath
для вставки правильного пути ключа:
let resultPredicateShoppingListDetail = NSPredicate(format: "%K == %@",
#keyPath(ShoppingList.Id), shoppingListModel.Id)
Для получения дополнительной информации о %K
и %@
в предикатах см. «Формат предикатаСинтаксис строки » в« Руководстве по программированию предиката ».