3

この方法でメソッドを持つことが可能です:

[obj mergeObjs:obj1,obj2,obj3,nil];

または、次の方法でメソッドを作成します。

[obj mergeObjs:obj1,obj2...obj(n),nil usingBlocks:blk1,blk2,blk3....blk(m),nil];

ここで、n は m と等しい場合と等しくない場合があります。

基本的に、1 つのメソッド宣言で複数の可変引数リスト。?

これは潜在的な答えではありません:

[obj merge:[NSArray arrayWithObjects:[NSArray arrayWithObjects:...,nil],[NSArray arrayWithObjects:...,nil]...,nil]];

前もって感謝します。

単一変数引数リストで見つけたリンクは次のとおりです。

http://developer.apple.com/library/mac/#qa/qa1405/_index.html Objective-C で可変引数メソッドを作成する方法

4

3 に答える 3

5

可変長の引数リストではこれを実現できませんが、2つの配列を渡すことを検討したことがありますか?

[obj mergeObjs:(NSArray*)objs usingBlocks:(NSArray*)blocks];

最新バージョンのclang(最近のXcodeリリースで使用されているObjective Cコンパイラ)もNSArrayリテラルをサポートしています

[instance mergeObjs:@[obj1, obj2, obj3] usingBlocks:@[^{}, ...]];

(もちろん、NSArrayに挿入するためにブロックを適切にコピーするようにしてください)。

于 2012-04-13T11:37:49.663 に答える
4

いいえ。メッセージのディスパッチは、objc_msgSend()(またはそのバリアントの 1 つ) への呼び出しに要約されます。これは C の呼び出し規則に従っており、その規則では複数の可変引数リストを表現する方法がありません。

于 2012-04-13T11:29:29.683 に答える
0

回答に基づく結論と深刻な脱毛 - メソッド宣言に 2 つの可変引数リストを含めることはできません。

multi-Variable-argument-list を使用する目的は、私のコンテキストでより読みやすくすることでした。

配列で間に合わせます...ため息!!。

于 2012-04-15T06:13:49.727 に答える