我有一个名为Collection的类,它实现了EKEnumerable,它包含一个数组/枚举器和多个子类,名为CarCollection,DriverCollection等。集合上有各种方法,它们当前返回id或实现提供类型为id的参数的块。我想让Car,Driver和其他子类能够输入返回值和块参数。
作为Collection中的一个例子:
- (id)find:(BOOL (^)(id))block
{
id next;
EKEnumerator *e = self.asEnumerator;
while ((next = e.next)) {
if (block(next)) {
return next;
}
}
return nil;
}
希望在CarCollection中动态输入,而不是必须实现子类中的每个方法:
- (Car *)find:(BOOL (^)(Car *))block
{
id next;
EKEnumerator *e = self.asEnumerator;
while ((next = e.next)) {
if (block(next)) {
return next;
}
}
return nil;
}
元编程是否可行,或者我需要在每个子类中重新实现每种方法都具有正确的类型。