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]];
}

特定のプロトコルを実装するクラスで同様のことを行う 3 つのメソッドがあります (doX:withClass: メソッドは、指定されたクラスがそのようなプロトコルを実装していると仮定して、いくつかの手順を実行します)。

私の質問は、どうすればよりプログラム的にクラスをループできるので、リストに追加するだけで (コード内 - 実行時に追加できることに興味がない)、ループに追加できますか?

4

2 に答える 2

4

私の提案はNSArrayClassオブジェクトのを渡すことです:

 [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 を定義する基本クラスを拡張しようとするでしょう。次に、基本クラスに何とか観察させ、変更時に doX を呼び出すことができます。しかし、あなたが何をしようとしているのか、私には理解できないかもしれません。

于 2010-06-22T21:10:27.217 に答える