如何在Objective-C中传递多个参数?

我已经阅读了几篇有关Objective-C方法语法的文章,但我想我不明白一个方法的多个名字。

我试图创build一个名为getBusStopsNSStringNSTimeInterval参数和返回types的NSMutableArray 。 这是我如何构build的方法,但它显然在运行时得到错误:

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

我看到另一个方法的例子:

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

我不明白为什么这个方法有每个参数的方法名称。 我是否应该像这样做:

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

Objective-C没有命名参数,因此冒号左侧的所有内容都是方法名称的一部分。 例如,

 getBusStops: forTime: 

是方法的名称。 这个名字被打破了,所以它可以更具描述性。 你可以简单地命名你的方法

 getBusStops: : 

但是这并不能告诉你第二个参数。

您至less需要用“:”分隔每个参数名称。 技术上这个名字是可选的,但为了可读性,build议使用这个名字。 所以你可以写:

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

或者你build议的:

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

是; Objective-C方法的语法是这样的,有几个原因。 其中之一就是清楚你指定的参数是什么。 例如,如果要在某个索引处将对象添加到NSMutableArray ,则可以使用以下方法:

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

这个方法被称为insertObject:atIndex:很明显,一个对象被插入到一个指定的索引处。

在实践中,添加一个string“Hello,World!” 在一个NSMutableArray被调用的array索引5将被调用,如下所示:

 NSString *obj = @"Hello, World!"; int index = 5; [array insertObject:obj atIndex:index]; 

这也减less了方法参数顺序之间的不确定性,确保您首先传递对象参数, 然后传递索引参数。 当使用大量参数的函数时,这会变得更有用,并减less传递参数时的错误。

此外,方法命名约定是这样的,因为Objective-C不支持重载; 然而,如果你想写一个方法来完成相同的工作,但是采用不同的数据types,这可以完成; 拿,例如, NSNumber类; 这有几个对象创build方法,包括:

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

在像C ++这样的语言中,你可以简单地重载数字方法,以允许不同的数据types作为parameter passing; 然而,在Objective-C中,这个语法允许通过改变函数的每个变体的方法名来实现相同函数的几个不同的变体。

每个参数之前的文本是方法名称的一部分 。 在你的例子中,方法的名字实际上是

 -getBusStops:forTime: 

每个:代表一个论点。 在方法调用中,方法名称在:s处分割,参数出现在:seg后面

 [getBusStops: arg1 forTime: arg2] 

创build方法:

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

为了调用方法:

 [mymethod:self.contoCorrente withsecond:self.asecond]; 
 (int) add: (int) numberOne plus: (int) numberTwo ; (returnType) functionPrimaryName : (returnTypeOfArgumentOne) argumentName functionSecondaryNa 

我:

 (returnTypeOfSecontArgument) secondArgumentName ; 

和其他语言一样,我们使用下面的语法void add(int one, int second)但是在OBJ_c中分配参数的方式与上面描述的不同