2011-09-19 9 views
20

La declaración de +[NSPredicate predicateWithBlock:] se parece a esto: la documentación¿Cuál es el parámetro de enlaces para el bloque en predicateWithBlock: used for?

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

de Apple para el segundo parámetro al bloque, bindings, dice que es:

El diccionario de variables de sustitución. El diccionario debe contener pares clave-valor para todas las variables en el receptor.

No puedo entender por qué este parámetro es necesario, ni lo he visto en ningún otro lugar. ¿Por qué está ahí?

Además, ¿tengo que mirar dentro de bindings cuando se usa un predicado basado en bloques con -[NSArray filteredArrayUsingPredicate:]?

+1

¡Una respuesta aquí con un ejemplo de dónde y cómo usar * el parámetro 'bindings' sería muy útil! – pkamb

Respuesta

11

Consulte la documentación de la clase:

También puede crear predicados que incluyen variables, de modo que el predicado puede ser pre-definido antes de la sustitución de valores concretos en tiempo de ejecución. En Mac OS X v10.4, para los predicados que usan variables, la evaluación es un proceso de dos pasos (consulte predicateWithSubstitutionVariables: and evaluateWithObject :). En Mac OS X v10.5 y posterior, puede usar evaluateWithObject: sustituciónVariables :, que combina estos pasos.

Entonces echa un vistazo a predicate syntax docs.


Si se va a invocar posteriormente evaluateWithObject:substitutionVariables:, dijo diccionario sería pasada a su bloque. Esto permite la creación de predicados bastante genéricos donde el predicado resultante se puede pasar y se puede usar un lenguaje de sustitución consistente para la evaluación.

+1

Cuando define un predicado con formato de cadena, puedo ver la utilidad de las variables de sustitución. Pero todavía no entiendo cómo se pueden usar las variables de sustitución cuando se crea un predicado usando 'predicateWithBlock:'. (Un ejemplo sería genial) –

+0

Ah, ahora puedo ver lo que quieres decir. Además, ¿el parámetro de enlaces utilizado en absoluto cuando se crea el predicado pasa a '- [NSArray filteredArrayUsingPredicate:]'? Yo creo que no. –

+1

@ChaitanyaGupta: Vea aquí: http://www.wannabegeek.com/?p=149 –

Cuestiones relacionadas