-2

私がやりたいことを正確に説明する方法がよくわかりません-私ができる最善のことは、例としていくつかのコードを提供することです:

- (void) doStuffInLoopForDataArray:(NSArray *)arr forObjectsOfClass:(NSString *)class
{

    for ([class class] *obj in arr)
    {

        // Do stuff

    }

}

だから私はこれを次のように呼ぶかもしれません

NSArray *arr = [NSArray arrayWithObjects:@"foo",@"bar", nil];
[self doStuffInLoopForDataArray:arr forObjectsOfClass:@"NSString"];

そして、私が書いたかのようにコードが実行されることを期待します

- (void) doStuffInLoopForDataArrayOfStrings:(NSArray *)arr
{

    for (NSString *obj in arr)
    {

        // Do KVC stuff

    }

}

この種の動作を取得する方法はありますか?

4

3 に答える 3

2

classメソッドに を渡す意味はあまりありません。次のようにループを実行します。

for (id obj in arr) {

呼び出したいメソッドが存在することを確認します。クラスを渡すことは、配列内のオブジェクトが実際にそのクラスのものであることを確認したい場合にのみ本当に役立ちますが、その情報では多くのことができませんでした。

于 2013-12-11T21:56:19.340 に答える
0

この質問を入力しているときにアイデアを思いつきました。ループの実行方法を変更する必要があるだけで、実際にクラスに送信する必要はありません。

- (void) doStuffInLoopForDataArray:(NSArray *)arr
{

    for (int i=0; i < [arr count]; i++)
    {

        // Do stuff

    }

}

私の一部は、実際に何かをしようとする前に // Do stuff確認していることに注意してください-そして、私が理解していることから、それは厄介なクラッシュを防ぐはずです.if ([[arr objectAtIndex:i] respondsToSelector:...])

于 2013-12-11T21:52:48.433 に答える