2009-04-06 7 views
155

私はObjective-Cのメソッド構文についていくつかの記事を読んだことがありますが、メソッドの複数の名前は分かりません。Objective-Cで複数のパラメータを渡すにはどうすればよいですか?

NSStringNSTimeIntervalパラメータと返されるタイプがNSMutableArraygetBusStopsというメソッドを作成しようとしています。これは私が方法を構築してきた方法ですが、それは明らかに、実行時にエラーを取得します。

- (NSMutableArray *)getBusStops:(NSString *)busStop 
           (NSTimeInterval *)timeInterval; 

私はこの方法で別の例を見ました:このメソッドは、メソッド名を持っている理由

-(NSInteger)pickerView:(UIPickerView *)pickerView 
      numberOfRowsInComponent:(NSInteger)component 

私は理解していません各パラメータについて

- (NSMutableArray *)getBusStops:(NSString *)busStop 
         forTime:(NSTimeInterval *)timeInterval 

答えて

102

のObjective-Cは、名前付きパラメータを持っていないので、コロンの左側にあるすべてのものは、メソッド名の一部です。たとえば、

getBusStops: forTime: 

は、このメソッドの名前です。名前は分かりやすいので分かりやすくなっています。あなたのメソッドに名前を付けるだけでいいですか?

getBusStops: : 

しかし、2番目のパラメータについてはあまり教えてくれません。

137

少なくとも ":"で各パラメータ名を区切る必要があります。技術的には名前はオプションですが、読みやすいようにすることをお勧めします。だから、書くことができます:

- (NSMutableArray*)getBusStops:(NSString*)busStop :(NSSTimeInterval*)timeInterval; 

か何を提案した:

- (NSMutableArray*)getBusStops:(NSString*)busStop forTime:(NSSTimeInterval*)timeInterval; 
+13

+1上記のように add(int one, int second)のボイドが、OBJ_cで引数を割り当てる方法構文 を以下は異なっている使用言語:Objective-Cの関数の引数は、実際に位置している名前が付けられていないので、ラベルは任意であり、人間の消費のためです。 –

61

はい。 Objective-Cのメソッドの構文は、いくつかの理由から、以下のようになります。これらのうちの1つは、指定しているパラメータが何であるかがわかるようになっています。あなたが特定のインデックスでNSMutableArrayにオブジェクトを追加している場合たとえば、あなたはメソッドを使用してそれを行うだろう:

- (void)insertObject:(id)anObject atIndex:(NSUInteger)index; 

このメソッドはinsertObject:atIndex:と呼ばれ、オブジェクトが指定された位置に挿入されていることが明らかですインデックス。

実際には、文字列「Hello、World!」を追加します。

NSString *obj = @"Hello, World!"; 
int index = 5; 

[array insertObject:obj atIndex:index]; 

これはまた、最初のオブジェクトパラメータを渡すことを保証する、メソッドパラメータの順序との間の曖昧さを低減、次いでインデックスパラメータを次のようにarray呼ばNSMutableArrayのインデックス5で呼び出されることになります。これは、多数の引数を取る関数を使うときにはより便利になり、引数を渡すときのエラーは少なくなります。

さらに、Objective-Cはオーバーロードをサポートしていないため、メソッドの命名規則はこのようになります。ただし、同じジョブを実行するが、異なるデータ型を取るメソッドを作成する場合は、これを実行できます。例えば、NSNumberクラスを取る。

  • + (id)numberWithBool:(BOOL)value;
  • + (id)numberWithFloat:(float)value;
  • + (id)numberWithDouble:(double)value;なC++などの言語で

、あなたは、単にに異なるデータ型を許可するように数メソッドをオーバーロードになります。これには、いくつかのオブジェクトの作成方法を持っています引数として渡すことができます。ただし、Objective-Cでは、この構文により、関数の各バリアントのメソッド名を変更することで、同じ関数のいくつかの異なるバリアントを実装することができます。

+0

は、関数名にパラメータ名が含まれている場合、メソッド呼び出し(メッセージ送信)中に必要なパラメータ名ですか? – Naveen

23

各パラメータの前のテキストはメソッド名の部分です。あなたの例から、メソッドの名前は実際には

-getBusStops:forTime: 

それぞれが引数を表します。メソッド呼び出しでは、メソッド名は:sで分割され、引数は:sの後に表示されます。例えば通話のための

-(void)mymethods:(NSString *)aCont withsecond:(NSString *)a-second { } 

方法:

[mymethod:self.contoCorrente withsecond:self.asecond]; 
+3

あなたはメソッドの名前を追加するのを忘れたと思います。 –

-2
(int) add: (int) numberOne plus: (int) numberTwo ; 
(returnType) functionPrimaryName : (returnTypeOfArgumentOne) argumentName functionSecondaryNa 

私:OTHのように

(returnTypeOfSecontArgument) secondArgumentName ; 

メソッドを作成するための

[getBusStops: arg1 forTime: arg2] 
関連する問題