Предикаты используются при построении поискового запроса или для фильтрации в памяти с помощью определения логических условий.
Хотя предикаты принято создавать непосредственно из экземпляров
NSComparisonPredicate, NSCompoundPredicate и NSExpression, часто предикаты создаются с помощью обычных (форматных) строк. Рассмотрим некоторые способы задания предикатов.
⚪ Простые сравнения. Пример:
jobTitle == "Team Lead" или channelName == "iOS Dev".⚪ Поиск без учета регистра и диакритических знаков, например,
name contains[cd] "Bruce".💡Интересный факт: здесь c это case-insensitive (без учёта регистра), а d - diacritic insensitive (игнорим диакритический знак, то есть если в поиске будет два символа c и ç, они попадут в условие).
⚪ Логические операции, например
firstName like "Ivan" или lastName like "Ivanov". Нельзя не уточнить, что
like сработает как == для этого условия.⚪ Ограничения временного диапазона, например,
date between {$YESTERDAY, $TOMORROW}.⚪ Относительные условия, например,
group.name like "work*".⚪ Агрегатные операции, например
@sum.items.price < 1000. БОНУС
🟢 Ключевое слово
MATCHES можно использовать для поиска с помощью регулярки.Пример:
NSPredicate(format: "name MATCHES %@", query).🟢 А для поиска строк, начинающихся или заканчивающихся заданным условием, пригодятся
BEGINSWITH и ENDSWITH.📖 Полный справочник по синтаксису можно посмотреть в документации.
📖 Вы также можете создавать предикаты, включающие переменные, используя метод
evaluate(with:substitutionVariables:), чтобы предварительно определить предикат перед заменой конкретных значений в рантайме.@iOS Dev