2012-06-07 27 views
6

Estoy tratando de entender cómo adoptar el protocolo de enumeración rápida (en iOS/objetivo C) para una clase que estoy creando. Leí la sección de los documentos de Apple, pero ... ¡no lo entiendo del todo!Ejemplo de adopción/implementación de enumeración rápida para mi clase?

¿Alguien tiene algún código de muestra que pueda ver?

Lo que estoy tratando de hacer: tengo una matriz de objetos sobre los cuales quiero que un remitente itere. El emisor quiere usar una construcción for-in. El truco es que no quiero que el remitente vea todos los objetos en la matriz porque algunos de ellos no son válidos en el contexto de la aplicación.

En otras palabras, quiero que mi iterador devuelva un subconjunto de objetos en la matriz que coincida con ciertos criterios.

Preferiría no crear ninguna nuevas matrices en el proceso para no ralentizar las cosas.

Respuesta

8

La propia FastEnumerationSample de Apple lo demuestra bastante bien. Por los sonidos que tiene, es posible que aún no lo haya visto.

También hay this blog post.

+0

¡Estupendo! Sí, no había visto eso. ¡Gracias! –

+0

Esa publicación de blog es técnicamente muy precisa, pero muy mal escrita. Da saltos en cosas que no necesitas saber y muestra cosas que no debes hacer, oscureciendo masivamente las cosas que necesitas saber. Las publicaciones de Mike Ash suelen ser de mucha mayor calidad :(. Lo he leído muchas veces, y todavía es incomprensible. Recomiendo no molestarme. Mejor piratear la fuente de Apple hasta que puedas adivinar tu camino para entenderlo. – Adam

0

No sé a qué te refieres con "el remitente desea usar una construcción for-in". El resultado que está solicitando probablemente se obtenga mejor utilizando indexesOfObjectsPassingTest :, que le proporcionará un conjunto de índices de todos los elementos de su matriz que superen cualquier prueba que haya configurado.

También podría usar filteredArrayUsingPredicate: para derivar una nueva matriz que es un subconjunto de su original - Sé que dijo que no quería crear nuevas matrices, pero si desea devolver un subconjunto de la matriz, entonces tienes que crear una nueva matriz.

2

Mucho mejor explicación aquí:

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

Nota: el código fuente de Apple es técnicamente correcto, pero mal explicado, y sobre todo inútil a menos que le gusta jugar "adivinar lo que el programador estaba pensando/fumar ese día" .

Liekwise, la publicación de Mike Ash es correcta y útil después de saber cómo hacerlo, pero terrible como punto de partida.

Cuestiones relacionadas