0

我有多个班级,我想向所有班级发送相同的消息。为了更清楚:

我想将具有相同参数的 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: 方法执行许多步骤,假设给它的类实现了这样的协议)。

我的问题是,我怎样才能以编程方式循环遍历这些类,所以我可以简单地添加到一个列表中(在代码中 - 对能够在运行时添加不感兴趣)将其添加到循环中?

4

2 回答 2

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]; 
      }
}
于 2010-06-22T18:17:23.890 回答
1

不确定你真的想在这里循环。

如果是我,我可能会尝试让 Foo、Bar、Baz 和 Garply 来扩展一些定义 doX 的基类。然后你可以让你的基类观察 blah 并在它发生变化时调用 doX。但也许我不明白你想要做什么。

于 2010-06-22T21:10:27.217 回答