web-dev-qa-db-ja.com

複数の入力パラメーターを持つメソッド

Objective-Cの入力パラメーターを受け入れる独自のメソッドを作成する方法は理解していますが、実際には複数の入力パラメーターを持つメソッドを作成したことはありません!

複数の入力パラメーターで使用したメソッドから、それぞれの行に沿って名前があります

最初:2番目:3番目:

のように見える

- (void)first:(NSString *)fname second:(NSString *)mname third:(NSString *)lname;

私の質問は、複数の入力パラメータを使用して独自のメソッドを作成する場合、first:second:thirdのような名前を作成する必要がありますか?パラメータ名...正しく覚えていれば。

fullName:(NSString, NSString, NSString) fname, mname, lname;
40
C.Johns

いいえ。メソッドは次の形式である必要があります。

- (void)first:(NSString *)fname second:(NSString *)mname third:(NSString *)lname;
57
PengOne

パラメータをメソッドシグネチャにインターリーブする必要があります。 xcodeにはコード補完機能があり、メソッドの実行内容と必要なものについてわかりやすい名前を付けることができるため、問題ありません。

例えば.

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

UIViewControllerのAPIを見なくても上の例では、このメソッドがどのように機能し、どのようなパラメーターであるかをかなりよく理解できます。メソッドに何をするかを説明するために、名前を付けることをお勧めします(うまく行けば、ほとんどのコメントの必要性を取り除くことができます)。

もちろん、このように書かれたメソッドを見ることができます

- (void)myMethodThatAcceptsARectangle:(float)x :(float)y :(float)w :(float)h;

しかし、これは、パラメーターが何に関連するかに関して、使用中はあまり明確ではありません。

[self myMethodThatAcceptsARectangle:1.0f :1.0f :1.0f :1.0f];

そのため、これを回避する必要があります(これを確認し、何が起こっているのか疑問に思う場合に追加しました)。

26
Paul.s
fullName:(NSString, NSString, NSString) fname, mname, lname;

はい、あなたはそのようなことをすることができます。代わりに次のようになります。

-(void)fullName:(NSString*)fname :(NSString*)mname :(NSString*)lname

そして、あなたはこれを次のように呼ぶでしょう:

[foo fullName:first :middle :last];

ただし、これはObjective-Cのメソッド名のポイントを大きく打ち負かし、そのようなことをする主な理由は、通常のObjective-Cの慣習に対する嫌悪感を登録するか、おそらくあなたが取り組んでいるプロジェクトを開始することです。

20
Caleb

別のオプションはvariadic parametersです。これらは、それぞれに名前がなくても、可変量のパラメーターを提供するために使用されます。例えば.

[NSString stringWithFormat:@"My name is %@ %@", @"John", @"Doe"];

次のようなものになります。

- (void)names:(NSString *)names, ...;

実装追加情報

3
Iree

以下に、パラメーターを使用したメソッドの簡単な例を示します。

- (void)methodName:(NSString *)parameterOne methodNameContinues:(NSString *)parameterTwo;

例えば、

-(void)showAlertMsg:(NSString *)message withTitle:(NSString *)title;

ご覧のとおり、2番目のパラメーターにはプレフィックス "withTitle"があります。他のパラメーターについても同様に進めなければなりません。

1