Разбор UUID в NSPredicate - PullRequest
       10

Разбор UUID в NSPredicate

0 голосов
/ 19 сентября 2018

Я пытаюсь получить данные из базы данных Realm.Я использую NSPredicate.И это работало хорошо.Но сегодня я должен получить данные от объекта, у которого есть строковый идентификатор.Этот идентификатор находится в UUID.Поэтому, когда бы я ни пытался получить значение, используя UUID (идентификатор строки), он выдает мне ошибку примерно так:

невозможно проанализировать строку формата "Id == BD1698EE-C57D-4B8D-9D54-1D4403B2136F "'

Это утверждение об ошибке.Принимая во внимание, что у меня есть следующая строка в коде.

let resultPredicateShoppingListDetail = NSPredicate(format: "Id == \(shoppingListModel.Id)")

Это не имеет смысла для меня.Почему это происходит?

1 Ответ

0 голосов
/ 19 сентября 2018

Не используйте строковую интерполяцию для построения формата предиката, очень трудно получить правильное цитирование правильно.Например, это будет работать (обратите внимание на дополнительные одинарные кавычки):

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 и %@ в предикатах см. «Формат предикатаСинтаксис строки » в« Руководстве по программированию предиката ».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...