Bazı nesne kompozisyonları ile bir model sınıfım var ve bunun için yineleyiciler yazmanın en iyi yolunu bilmiyorum. Burada hiyerarşi (yarı sözde kod) 'dir, daha fazla ayrıntı sorunu görmek için:Bir mülkün bir koleksiyon özelliği için kendi yineleyicimi nasıl yazarım (doğru tipte döküm ile)?
A Kök sınıfı:
MYEntity : NSObject
@property int commonProperty;
@property NSArray *childs; //Childs of any kind.
Bazı somut alt sınıfları:
MYConcreteStuff : MYEntity
@property int number;
MYConcreteThing : MYEntity
@property NSString *string;
Ve bir kök nesnesi ile beton koleksiyonlar:
MYRoot : MYEntity
@property MYEntity *stuff; //Collect only stuff childs here.
@property MYEntity *things; //Collect only thing childs here.
Şimdi koleksiyonlar için (örneğin, MYEn) havalı üye girişlerini yazabilirim tity), like:
-(MYEntity*)entityForIndex:(int) index
{
if ([self.childs count] > index)
return [self.childs objectAtIndex:index];
return nil;
}
Kök nesneler için daha da havalı, iyi tipte döküm üyeler.
-(MYConcreteThing*)thingForIndex:(int) index
{
if ([self.things count] > index)
return (MYConcreteThing*)[self.things entityForIndex];
return nil;
}
Ama nasıl böyle koleksiyonları için bazı oneliner yineleyicinızı yazmak için hiçbir fikrim yok. özenti istemci kod şey gibi:
for (MYConcreteThing *eachThing in myRoot.things)
eachThing.string = @"Success."; //Set "thingy" stuff thanks to the correct type.
Ben bloklarını kullanarak düşünüyorum, ancak daha temiz kesim çözüm söz konusu olabilir. Herhangi bir fikir/deneyim?
Eğer işler bir dizilişse, o zaman KVO şeyleri olmadan basitçe (myRoot.things içindeki Thing * olayı) için yapılabilir. – Geri
Fakat şeyler, childs adında bir diziye sahip olan bir varlıktır. Bu yüzden, bir kaç tıklamaya ihtiyacım var. – Geri
Sorunun daha açık olması için modifiye ettim. Ya da en azından kesin. :) – Geri