web-dev-qa-db-ja.com

デフォルトパラメータを持つObjective-C関数?

可能性のある複製:
Objective-C 2.0のオプションの引数?
Objective-Cのデフォルトの引数値

Objective-CでC関数を書いています。最後のパラメーターにデフォルト値が必要です。

私はもう試した:

foo(int a, int b, int c = 0);

しかし、それはC++です。

私も試しました:

foo(int a, int b, int c)
{
    ...
}

foo(int a, int b)
{
   foo(a, b, 0);
}

しかし、それはalsoC++です。

代わりにObjective-Cでこれを行う方法はありますか?

37
Brian Postow

ObjCにはデフォルトのパラメーターはありません。

ただし、次の2つのメソッドを作成できます。

-(void)fooWithA:(int)a b:(int)b c:(int)c {
  ...
}
-(void)fooWithA:(int)a b:(int)b {
  [self fooWithA:a b:b c:0];
}

Cの場合:ObjCを使用してCサブセットに追加される特別なものはありません。純粋なCで実行できないことは、ObjCでコンパイルしても実行できません。つまり、デフォルトのパラメータを持つことも、関数をオーバーロードすることもできません。代わりに2つの関数を作成します。

101
kennytm

いいえ、objective-cはデフォルトのパラメーターをサポートしていません。 類似の質問 を参照してください

4
Vladimir

C関数の場合-いいえ。 Objective Cクラスメソッドの場合-はい、2つのメソッドを実行します。1つは短いパラメーターで、もう1つのメソッドを呼び出します。

または、ソースの名前を.mmに変更すると、C関数が魔法のようにC++になります。

1
Seva Alekseyev

可変長の引数リストを使用してC関数を作成できます。関数の宣言されたパラメーターの1つのデータ型として「...」を使用して、パラメーター引数リストの変数引数リストの開始位置を指定できます。 (これにより、リストの開始前に1つ以上の必要な引数を指定できます。)

printf()は、この機能(varargsとして知られている)を使用して記述された関数の例です。

printf(const char *restrict format, ...);

ここでは、最初の引数が必要であり、その後にゼロ個以上の追加の引数を続けることができます。

この方法で関数を記述した場合、欠落しているパラメーターのデフォルト値を提供できます。

1
jlehr