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

我读过几篇关于 Objective-C 方法语法的文章,但是我想我不理解一个方法的多个名称。

我正在尝试创建一个名为 getBusStops的方法,该方法带有 NSStringNSTimeInterval参数,返回类型为 NSMutableArray。我是这样构造这个方法的,但是它在运行时显然会出错:

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

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

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

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

- (NSMutableArray *)getBusStops:(NSString *)busStop
forTime:(NSTimeInterval *)timeInterval
282854 次浏览

至少需要用“ :”来分隔每个参数名。从技术上讲,这个名称是可选的,但是为了便于阅读,建议使用它。所以你可以写:

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

或者你的建议:

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

Objective-C 没有命名参数,所以冒号左边的所有内容都是方法名的一部分。比如说,

getBusStops: forTime:

方法的名称。这个名称是分开的,因此它可以更具描述性。您可以简单地命名您的方法

getBusStops: :

但是这并没有告诉你关于第二个参数的太多信息。

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

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

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

实际上,在名为 arrayNSMutableArray的索引5处添加一个字符串“ Hello,World!”将被调用如下:

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


[array insertObject:obj atIndex:index];

这也减少了方法参数顺序之间的模糊性,确保您首先传递对象参数,那么是索引参数。当使用接受大量参数的函数时,这将变得更加有用,并减少传递参数时的错误。

此外,这个方法的变数命名原则是因为 Objective-C 不支持重载,但是,如果你想编写一个方法来完成相同的工作,但是采用不同的数据类型,这是可以实现的,例如,NSNumber类,它有几个对象创建方法,包括:

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

在 C + + 这样的语言中,你可以简单地重载 number 方法,以允许不同的数据类型作为参数传递; 然而,在 Objective-C 中,这种语法通过更改每个函数变体的方法名,允许实现同一函数的几个不同变体。

每个参数前面的文本是方法名称的 一部分。在您的示例中,该方法的名称实际上是

-getBusStops:forTime:

每个: 代表一个参数。在方法调用中,方法名称在: s 处拆分,参数出现在: e.g 之后。

[getBusStops: arg1 forTime: arg2]

创建方法:

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

调用方法:

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

我:

(returnTypeOfSecontArgument) secondArgumentName ;

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