Tôi có một lớp mô hình với một số tác phẩm đối tượng và tôi không biết cách tốt nhất để viết trình lặp cho việc này. Để xem các vấn đề chi tiết hơn, đây là hệ thống phân cấp (mã bán giả):Làm cách nào để viết trình vòng lặp của riêng tôi cho thuộc tính bộ sưu tập của thuộc tính (với kiểu nhập chính xác)?
Một lớp Root:
MYEntity : NSObject
@property int commonProperty;
@property NSArray *childs; //Childs of any kind.
Một số lớp con cụ thể:
MYConcreteStuff : MYEntity
@property int number;
MYConcreteThing : MYEntity
@property NSString *string;
Và một đối tượng gốc với bộ sưu tập bê tông:
MYRoot : MYEntity
@property MYEntity *stuff; //Collect only stuff childs here.
@property MYEntity *things; //Collect only thing childs here.
Bây giờ tôi có thể viết trình truy cập thành viên mát mẻ cho bộ sưu tập (trong MYEn tity), như:
-(MYEntity*)entityForIndex:(int) index
{
if ([self.childs count] > index)
return [self.childs objectAtIndex:index];
return nil;
}
Và thậm chí nhiều bộ phận truy cập thành viên được đúc tốt hơn cho đối tượng gốc.
-(MYConcreteThing*)thingForIndex:(int) index
{
if ([self.things count] > index)
return (MYConcreteThing*)[self.things entityForIndex];
return nil;
}
Nhưng tôi không biết cách viết một số trình vòng lặp trên mạng cho các bộ sưu tập đó. Mã Wannabe khách hàng là một cái gì đó như:
for (MYConcreteThing *eachThing in myRoot.things)
eachThing.string = @"Success."; //Set "thingy" stuff thanks to the correct type.
Tôi đang nghĩ đến việc sử dụng các khối, nhưng có thể là một giải pháp cắt sạch hơn. Bất kỳ ý tưởng/kinh nghiệm nào?
Nếu mọi thứ là một mảng, sau đó nó có thể được thực hiện đơn giản bởi (Điều * điều trong myRoot.things), không có công cụ KVO. – Geri
Nhưng mọi thứ là một thực thể có một mảng được gọi là Childs. Đó là lý do tại sao tôi cần một số indirection. – Geri
Tôi đã sửa đổi câu hỏi để rõ ràng hơn. Hoặc chính xác ít nhất. :) – Geri