Tengo una clase de modelo con algunas composiciones de objetos, y no sé la mejor manera de escribir iteradores para esto. Para ver el problema en más detalles, aquí está la jerarquía (código semi-pseudo):¿Cómo escribir mi propio iterador para una propiedad de colección de una propiedad (con el tipo correcto de conversión)?
Una clase raíz:
MYEntity : NSObject
@property int commonProperty;
@property NSArray *childs; //Childs of any kind.
Algunas subclases concretas:
MYConcreteStuff : MYEntity
@property int number;
MYConcreteThing : MYEntity
@property NSString *string;
y un objeto de raíz con colecciones de hormigón:
MYRoot : MYEntity
@property MYEntity *stuff; //Collect only stuff childs here.
@property MYEntity *things; //Collect only thing childs here.
Ahora puedo escribir accesos de miembros geniales para las colecciones (en MYEn tity), como:
-(MYEntity*)entityForIndex:(int) index
{
if ([self.childs count] > index)
return [self.childs objectAtIndex:index];
return nil;
}
Y aún más accesorios de miembro fundido geniales y bien creados para el objeto raíz.
-(MYConcreteThing*)thingForIndex:(int) index
{
if ([self.things count] > index)
return (MYConcreteThing*)[self.things entityForIndex];
return nil;
}
Pero no tengo idea de cómo escribir algunos iteradores de oneliner para dichas colecciones. El código de cliente aspirante es algo así como:
for (MYConcreteThing *eachThing in myRoot.things)
eachThing.string = @"Success."; //Set "thingy" stuff thanks to the correct type.
Estoy pensando en el uso de bloques, pero podría ser una solución corte más limpio. ¿Alguna idea/experiencia?
Si las cosas fueran una matriz, entonces se podría hacer simplemente por (cosas * de cosasMi.Objetos), sin material de KVO. – Geri
Pero las cosas son una entidad que tiene una matriz llamada childs. Por eso necesito algo de indirección. – Geri
Modifiqué la pregunta para ser más claro. O al menos exacto. :) – Geri