2012-06-07 16 views
6

Sto cercando di capire come adottare il protocollo di enumerazione veloce (sotto iOS/obiettivo C) per una classe che sto creando. Ho letto la sezione dei documenti di Apple, ma ... Non riesco a capirlo!Esempio di adozione/implementazione di enumerazione rapida per la mia classe?

Qualcuno ha qualche codice di esempio che potrei guardare?

Quello che sto cercando di fare: ho una matrice di oggetti su cui voglio far scorrere un mittente. Il mittente desidera utilizzare un costrutto for-in. Il problema è che non voglio che il mittente visualizzi tutti gli oggetti nell'array perché alcuni di essi non sono validi nel contesto dell'applicazione.

In altre parole, voglio che il mio iteratore restituisca un sottoinsieme di oggetti nell'array che corrisponde a determinati criteri.

Preferirei non creare alcun nuovo array nel processo in modo da non rallentare le cose.

risposta

8

Lo stesso Apple FastEnumerationSample lo dimostra abbastanza bene. Dai suoni di ciò, potresti non averlo ancora visto.

C'è anche this blog post.

+0

Ottimo! Sì, non l'avevo visto. Grazie! –

+0

Quel post sul blog è tecnicamente molto accurato, ma scritto male. Salta attorno a cose che non hai bisogno di sapere e mostra cose che non dovresti fare, oscurando in maniera massiccia le cose che devi sapere. I post di Mike Ash sono in genere di qualità molto più elevata :(. L'ho letto molte volte, ed è ancora incomprensibile - raccomando di non disturbare. Meglio hackerare la fonte Apple finché non riesci a indovinare il tuo modo di comprenderlo. – Adam

0

Non so cosa intendi per "mittente desidera utilizzare un costrutto for-in". Probabilmente il risultato che stai chiedendo sarebbe stato raggiunto meglio usando indexesOfObjectsPassingTest :, che ti darà un set di indici di tutti gli elementi dell'array che superano qualunque test tu abbia configurato per esso.

Puoi anche usare filteredArrayUsingPredicate: per derivare un nuovo array che è un sottoinsieme del tuo originale - so che hai detto che non volevi creare alcun nuovo array, ma se vuoi restituire un sottoinsieme dell'array, allora devi creare un nuovo array.

2

Molto meglio spiegazione qui:

http://www.cocoawithlove.com/2008/05/implementing-countbyenumeratingwithstat.html

NB: il codice sorgente di Apple è tecnicamente corretta, ma mal spiegato, e per lo più inutili a meno che non ti piace giocare "indovinate un po 'il programmatore pensava/fumare quel giorno" .

Liekwise, il post di Mike Ash è corretto e utile dopo aver saputo come farlo, ma terribile come punto di partenza.

Problemi correlati