我已经阅读了几篇关于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
答案 0 :(得分:151)
您需要至少用“:”分隔每个参数名称。从技术上讲,该名称是可选的,但建议其可读性。所以你可以写:
- (NSMutableArray*)getBusStops:(NSString*)busStop :(NSSTimeInterval*)timeInterval;
或你的建议:
- (NSMutableArray*)getBusStops:(NSString*)busStop forTime:(NSSTimeInterval*)timeInterval;
答案 1 :(得分:109)
Objective-C没有命名参数,因此冒号左侧的所有内容都是方法名称的一部分。例如,
getBusStops: forTime:
是方法的名称。该名称被拆分,因此它可以更具描述性。你可以简单地命名你的方法
getBusStops: :
但这并没有告诉你第二个参数。
答案 2 :(得分:64)
是; Objective-C方法的语法是这样的,原因有两个:其中一个是明确你指定的参数是什么。例如,如果要在某个索引处向NSMutableArray
添加对象,则可以使用以下方法执行此操作:
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;
此方法称为insertObject:atIndex:
,很明显在指定的索引处插入了一个对象。
实际上,添加一个字符串“Hello,World!”在名为NSMutableArray
的{{1}}的索引5处将被调用如下:
array
这也减少了方法参数顺序之间的模糊性,确保首先传递对象参数,然后然后索引参数。当使用带有大量参数的函数时,这会变得更有用,并减少传递参数时的错误。
此外,方法命名约定是这样的,因为Objective-C不支持重载;但是,如果您想编写一个执行相同工作但采用不同数据类型的方法,则可以完成此操作;以NSString *obj = @"Hello, World!";
int index = 5;
[array insertObject:obj atIndex:index];
类为例;这有几种对象创建方法,包括:
NSNumber
+ (id)numberWithBool:(BOOL)value;
+ (id)numberWithFloat:(float)value;
在诸如C ++之类的语言中,您只需重载数字方法,以允许将不同的数据类型作为参数传递;但是,在Objective-C中,通过更改函数的每个变体的方法名称,此语法允许实现相同函数的几个不同变体。
答案 3 :(得分:23)
每个参数之前的文本是方法名称的部分。从您的示例中,方法的名称实际上是
-getBusStops:forTime:
每个:代表一个论点。在方法调用中,方法名称在:s处拆分,参数在:s之后显示。 e.g。
[getBusStops: arg1 forTime: arg2]
答案 4 :(得分:6)
for create method:
-(void)mymethods:(NSString *)aCont withsecond:(NSString *)a-second {
//method definition...
}
用于调用方法:
[mymethods:self.contoCorrente withsecond:self.asecond];
答案 5 :(得分:-3)
(int) add: (int) numberOne plus: (int) numberTwo ;
(returnType) functionPrimaryName : (returnTypeOfArgumentOne) argumentName functionSecondaryNa
我是:
(returnTypeOfSecontArgument) secondArgumentName ;
和其他语言一样,我们使用以下语法
无效add(int one, int second)
但是OBJ_c
中分配参数的方式与上面描述的不同