Подтвердить что ты не робот

Каков параметр привязки для блока в predicateWithBlock: используется для?

Объявление для +[NSPredicate predicateWithBlock:] выглядит следующим образом:

+ (NSPredicate *)predicateWithBlock:(BOOL (^)(id evaluatedObject, NSDictionary *bindings))block

Документация Apple для второго параметра блока, bindings, говорит, что это:

Словарь переменных замещения. Словарь должен содержать пары ключ-значение для всех переменных в приемнике.

Я не могу понять, почему этот параметр необходим - и я не видел, чтобы он использовался где угодно. Почему он там?

Кроме того, мне нужно заглянуть внутрь bindings при использовании предиката на основе блока с помощью -[NSArray filteredArrayUsingPredicate:]?

4b9b3361

Ответ 1

См. документацию по классу:

Вы также можете создавать предикаты, которые включают переменные, так что предикат может быть предварительно определен, прежде чем подставлять конкретные значения в во время выполнения. В Mac OS X v10.4 для предикатов, использующих переменные, оценка - это двухэтапный процесс (см. predicateWithSubstitutionVariables: и оценкаWithObject:). В Mac OS X v10.5 и более поздние версии, вы можете использовать evaluationWithObject: substitutionVariables:, который объединяет эти шаги.

Затем проверьте предикат синтаксиса.


Если вы впоследствии будете вызывать evaluateWithObject:substitutionVariables:, указанный словарь будет передан вашему блоку. Это позволяет создать довольно общий предикат, в котором можно передать полученный предикат, и для оценки можно использовать согласованный язык подстановки.