web-dev-qa-db-ja.com

Objective-Cで複数のパラメーターを渡すにはどうすればよいですか?

Objective-Cメソッドの構文に関するいくつかの投稿を読みましたが、メソッドの複数の名前を理解していないと思います。

getBusStopsおよびNSStringパラメーターと戻り値の型NSTimeIntervalを使用してNSMutableArrayというメソッドを作成しようとしています。これは私がメソッドを構築した方法ですが、実行時に明らかにエラーが発生します:

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

メソッドを使用した別の例を見ました:

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

このメソッドに各パラメーターのメソッド名がある理由がわかりません。私は同じようなことをする必要があります:

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

Objective-Cには名前付きパラメーターがないため、コロンの左側のすべてがメソッド名の一部です。例えば、

getBusStops: forTime:

メソッドの名前です。名前は分割されているため、よりわかりやすくなります。単にメソッドに名前を付けることができます

getBusStops: :

ただし、2番目のパラメーターについてはあまりわかりません。

111
Terry Wilcox

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

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

またはあなたが提案したもの:

- (NSMutableArray*)getBusStops:(NSString*)busStop forTime:(NSSTimeInterval*)timeInterval;
150
E.M.

はい; Objective-Cメソッドの構文は、いくつかの理由でこのようなものです。これらの1つは、指定するパラメーターが何であるかを明確にするためです。たとえば、特定のインデックスでNSMutableArrayにオブジェクトを追加する場合、次のメソッドを使用して実行します。

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

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

実際には、文字列「Hello、World!」を追加しますNSMutableArrayと呼ばれるarrayのインデックス5で、次のように呼び出されます。

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

[array insertObject:obj atIndex:index];

これにより、メソッドパラメーターの順序のあいまいさが減り、最初にオブジェクトパラメーターthen indexパラメーターを渡すようになります。これは、多数の引数を取る関数を使用する場合により便利になり、引数を渡す際のエラーを減らします。

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

  • + (id)numberWithBool:(BOOL)value;
  • + (id)numberWithFloat:(float)value;
  • + (id)numberWithDouble:(double)value;

C++などの言語では、numberメソッドをオーバーロードするだけで、さまざまなデータ型を引数として渡すことができます。ただし、Objective-Cでは、この構文により、関数の各バリアントのメソッド名を変更することにより、同じ関数の複数の異なるバリアントを実装できます。

65
Alex Rozanski

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

-getBusStops:forTime:

各:は引数を表します。メソッド呼び出しでは、メソッド名は:sで分割され、引数は:sの後に表示されます。例えば.

[getBusStops: arg1 forTime: arg2]
23
sigjuice

createメソッドの場合:

-(void)mymethods:(NSString *)aCont withsecond:(NSString *)a-second {
//method definition...
}

メソッドを呼び出すため:

[mymethods:self.contoCorrente withsecond:self.asecond];
6
VITROXMAN