0

ある配列内のオブジェクトを別の配列と等しくしようとしています。各プロパティを個別に設定すると正常に動作しますが、各プロパティを実行する関数を記述せずに、1 つのオブジェクトを antoher に設定したいと考えています。

-(void)DrawCard: (int) wp{
[self GetNc :(wp)];
if (nc > 0){    
    ((card*) [[Hands objectAtIndex:wp] objectAtIndex:nc]) = ((card*) [[Draws objectAtIndex:wp] objectAtIndex:0])
}

}

(wp はどのプレイヤーを表すかを表します。すべての GetNc は、現在ハンドで使用されているカード オブジェクトの最大インデックスを見つけることによって、整数 nc (新しいカードの) を設定します)。

これはコンパイルされませんが、個々のプロパティを設定すると次のようになります。

    ((card*) [[Hands objectAtIndex:wp] objectAtIndex:nc]).suit = ((card*) [[Draws objectAtIndex:wp] objectAtIndex:0]).suit;

また、キャストせずに試行すると、無効な左辺値エラーも発生します。つまり:

        [[Hands objectAtIndex:wp] objectAtIndex:nc] = [[Draws objectAtIndex:wp] objectAtIndex:0];

(キャストせずに配列オブジェクトを設定することは可能ですか?)

お読みいただき、ご返信いただきありがとうございます。乾杯!

4

1 に答える 1

2

これにより、配列のインデックスが同じオブジェクトを指すように設定されます。オブジェクトをコピーするものではないことをご理解いただければ幸いです。

[[Hands objectAtIndex:wp] replaceObjectAtIndex:nc withObject:[[Draws objectAtIndex:wp] objectAtIndex:0]];
于 2009-08-18T05:52:12.110 に答える