2011-09-19 9 views
20

La dichiarazione per +[NSPredicate predicateWithBlock:] assomiglia a questo: la documentazioneQual è il parametro bind per il blocco in predicateWithBlock: usato per?

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

di Apple per il secondo parametro al blocco, bindings, dice che è:

Il dizionario variabili di sostituzione. Il dizionario deve contenere coppie chiave-valore per tutte le variabili nel ricevitore.

Non riesco a capire perché questo parametro è necessario, né ho visto che venga utilizzato ovunque. Perché è lì?

Inoltre, è necessario cercare all'interno di bindings quando si utilizza un predicato basato su blocco con -[NSArray filteredArrayUsingPredicate:]?

+1

Una risposta qui con un esempio di dove e come usare * il parametro 'bindings' sarebbe molto utile! – pkamb

risposta

11

Vedere la documentazione della classe:

È anche possibile creare predicati che includono variabili, in modo che il predicato può essere pre-definito prima sostituendo valori concreti a runtime. In Mac OS X v10.4, per predicati che utilizzano variabili, la valutazione è un processo in due fasi (si veda predicateWithSubstitutionVariables: e evaluateWithObject :). In Mac OS X v10.5 e versioni successive, è possibile utilizzare evaluateWithObject: substitutionVariables :, che combina questi passaggi.

Quindi controllare lo predicate syntax docs.


Se si dovesse richiamare successivamente evaluateWithObject:substitutionVariables:, ha detto dizionario sarebbe passato al blocco. Ciò consente una creazione di predicati piuttosto generica in cui il predicato risultante può essere trasmesso e per la valutazione è possibile utilizzare una lingua sostitutiva coerente.

+1

Quando si definisce un predicato con il formato stringa, posso vedere l'utilità delle variabili di sostituzione. Ma ancora non capisco come le variabili di sostituzione possano essere usate quando si crea un predicato usando 'predicateWithBlock:'. (Un esempio sarebbe fantastico) –

+0

Ah, ora capisco cosa intendi. Inoltre, il parametro bind è utilizzato quando il predicato viene creato per essere passato a '- [NSArray filteredArrayUsingPredicate:]'? La mia ipotesi non lo è. –

+1

@ChaitanyaGupta: Vedi qui: http://www.wannabegeek.com/?p=149 –

Problemi correlati