我有多个类,所有这些类都要发送相同的消息。更清楚:
我想发送 doX:withClass:与许多类具有相同的参数。也许代码会更清楚:
+ (void)doX:(NSString *)blah {
[Utility doX:blah withClass:[Foo class]];
[Utility doX:blah withClass:[Bar class]];
[Utility doX:blah withClass:[Baz class]];
[Utility doX:blah withClass:[Garply class]];
}
我有三种方法在实现特定协议的类上做类似的事情(doX:withClass:方法执行许多步骤,假设给它的类实现了这样的协议)。
我的问题是,如何以编程方式循环遍历类,因此我可以简单地添加到列表中(在代码中 - 对运行时无法添加感兴趣)将其添加到循环中?
答案 0 :(得分:4)
我的建议是传递NSArray
个Class
个对象:
[Utility doX:blah withClasses:[NSArray arrayWithObjects:[Foo class], [Bar class], [Baz class], [Garply class], nil]];
-(void) doX:(Blah) blah withClasses:(NSArray *) classes {
//[classes makeObjectsPerformSelector:@selector(doX:) withObject:blah]
for(Class *someClass in classes) {
[Utility doX:blah withClass:someClass];
}
}
答案 1 :(得分:1)
不确定你真的想在这里循环。
如果是我,我可能会尝试让Foo,Bar,Baz和Garply扩展一些定义doX的基类。然后你可以让你的基类观察blah并在它改变时调用doX。但也许我不理解你想要做什么。