Для чего используется параметр bindings для блока в ПредикатеWithBlock: - PullRequest
21 голосов
/ 19 сентября 2011

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

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

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

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

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

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

1 Ответ

11 голосов
/ 19 сентября 2011

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

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

Затем ознакомьтесь с синтаксическим документом для предикатов .

<Ч />

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

...