我已经阅读了几篇关于Objective-C方法语法的文章,但我想我不了解一个方法的多个名称.
我正在尝试创建一个名为getBusStops
with NSString
和NSTimeInterval
parameters以及返回类型的方法NSMutableArray
.这是我构建方法的方法,但它在运行时显然会出错:
- (NSMutableArray *)getBusStops:(NSString *)busStop (NSTimeInterval *)timeInterval;
我看到了一个方法的另一个例子:
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
我不明白为什么这个方法有每个参数的方法名称.我应该做同样的事情:
- (NSMutableArray *)getBusStops:(NSString *)busStop forTime:(NSTimeInterval *)timeInterval
E.M... 154
您需要至少用":"分隔每个参数名称.从技术上讲,该名称是可选的,但建议其可读性.所以你可以写:
- (NSMutableArray*)getBusStops:(NSString*)busStop :(NSSTimeInterval*)timeInterval;
或者你的建议:
- (NSMutableArray*)getBusStops:(NSString*)busStop forTime:(NSSTimeInterval*)timeInterval;
+1:Objective-C函数参数确实是位置的,没有命名,因此标签是可选的,供人类使用. (14认同)
Terry Wilcox.. 115
Objective-C没有命名参数,因此冒号左侧的所有内容都是方法名称的一部分.例如,
getBusStops: forTime:
是方法的名称.该名称被拆分,因此它可以更具描述性.你可以简单地命名你的方法
getBusStops: :
但这并没有告诉你太多第二个参数.
您需要至少用":"分隔每个参数名称.从技术上讲,该名称是可选的,但建议其可读性.所以你可以写:
- (NSMutableArray*)getBusStops:(NSString*)busStop :(NSSTimeInterval*)timeInterval;
或者你的建议:
- (NSMutableArray*)getBusStops:(NSString*)busStop forTime:(NSSTimeInterval*)timeInterval;
Objective-C没有命名参数,因此冒号左侧的所有内容都是方法名称的一部分.例如,
getBusStops: forTime:
是方法的名称.该名称被拆分,因此它可以更具描述性.你可以简单地命名你的方法
getBusStops: :
但这并没有告诉你太多第二个参数.
是; Objective-C方法的语法是这样的,原因有两个:其中一个是明确你指定的参数是什么.例如,如果要将对象添加到NSMutableArray
某个索引处,则可以使用以下方法执行此操作:
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;
调用此方法insertObject:atIndex:
,很明显,对象正在指定的索引处插入.
在实践中,添加一个字符串"Hello,World!" 在索引中的5 NSMutableArray
称为array
将被称为如下:
NSString *obj = @"Hello, World!"; int index = 5; [array insertObject:obj atIndex:index];
这也减少了方法参数顺序之间的歧义,确保首先传递object参数,然后传递index参数.当使用带有大量参数的函数时,这会变得更有用,并减少传递参数时的错误.
此外,方法命名约定是这样的,因为Objective-C不支持重载; 但是,如果您想编写一个执行相同工作但采用不同数据类型的方法,则可以完成此操作; 以此为例NSNumber
; 这有几种对象创建方法,包括:
+ (id)numberWithBool:(BOOL)value;
+ (id)numberWithFloat:(float)value;
+ (id)numberWithDouble:(double)value;
在诸如C++之类的语言中,您只需重载数字方法以允许将不同的数据类型作为参数传递; 但是,在Objective-C中,此语法允许通过更改函数的每个变体的方法名称来实现相同函数的几个不同变体.
每个参数之前的文本是方法名称的一部分.从您的示例中,实际上是方法的名称
-getBusStops:forTime:
每个:代表一个论点.在方法调用中,方法名称在:s处拆分,参数显示在:seg之后
[getBusStops: arg1 forTime: arg2]
for create方法:
-(void)mymethods:(NSString *)aCont withsecond:(NSString *)a-second { //method definition... }
用于调用方法:
[mymethods:self.contoCorrente withsecond:self.asecond];