很长一段时间c#/ java / c ++程序员,品牌spankin new to objectivce C。阅读指南,看看api's,但还没有完全符合命名惯例。
示例:假设我有一个Cars类,其中包含每个汽车的数组,并且您希望方法返回数组的子集。
我看到NSArray有一个方法:getObjects,但在大多数情况下我看不到“get”。所以 你喜欢哪个?
赞赏所有投入!花费太多时间考虑这一点。
选项A) - (NSArray *)getCarsWithColor:(NSString *)color;
选项B) - (NSArray *)getCars:(NSString *)withColor;
Optoin C) - (NSArray *)carsWithColor:(NSString *)color;
选项D) - (NSArray *)汽车:(NSString *)withColor;
选项E)以上都不是,将其命名为xxxxxxxxxxxx ....
感谢。
答案 0 :(得分:5)
Objective-C方法很少以get
命名。 getObjects:
方法中只有get
,因为结果放在输入参数的缓冲区中。
-(void)getObjects:(id*)aBuffer;
^^^^ ^^^^^^^
虽然您的方法没有填充缓冲区,但返回一个数组。选项(A)和(B)都已出局。
此外,参数类型通常是选择器名称的一部分(:
之前的东西),例如。
-(UIView*)viewWithTag:(NSInteger)tag
^^^^^^^
// not view:(NSInteger)withTag
-(CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view
// not convert:(CGPoint)point from:(UIView*)view;
因此不鼓励选项(D)。
命名方法的详细指南可在Coding Guidelines for Cocoa: Naming Methods中找到。本指南还包括您可能感兴趣的其他公约。
答案 1 :(得分:1)
选项C是最好的。除非你得到指向C数组的指针,否则永远不要使用“get”,并且只应为引用它们的方法签名命名参数。
这样,具有多个参数的更长方法更清晰:
-(NSArray *)carsWithColor:(NSColor *)color
wheels:(NSInteger)wheels
seats:(NSInteger)seats
premiumInterior:(BOOL)premiumInterior ...
...在向其他人描述时可以缩短为:-carsWithColor:wheels:seats:premiumInterior:...
。
答案 2 :(得分:1)
“C”是执行此操作的标准方法。 get
在getter中很少使用,而且更为详细carsWithColor
。
答案 3 :(得分:1)
除了其他人所说的内容之外,我很好奇为什么你要在Cars类中存储NSArray对象。听起来像汽车是一个NS [Mutable]阵列ivar包含汽车类的实例。然后,您根本不需要这种方法。如果您正在使用Core Data,那么您将进行提取,如果您只是自己处理NSArray,则可以使用谓词来过滤数组的对象。我认为这是我的问题中最不可靠的方面。如果你确实需要这个方法,那么它将在包含NSArray ivar的对象上定义,如:
NSArray *cars = [NSArray arrayWithObjects:car1, car2, car3, nil];
(NSArray *)carsWithColor:(NSString *)color{
return [cars filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"color == %@", color]];
}
该代码未经测试,但这是我如何解决问题。该方法实际上是一种控制器类型方法,不应该是模型逻辑的一部分。让Cars课听起来像是混乱的MVC给我。
答案 4 :(得分:0)
Objective-C方法名称不使用get
前缀。所以选项C最接近正确,但需要注意的是aWithB
构造意味着返回的NSArray *
将是autorelease
- d。
答案 5 :(得分:0)
哦,有很多方法可以做你想做的事!通常,除非您定义自定义的getter,否则应避免使用“get ...”表示法,以避免混淆。我投票选项C,“ - (NSArray *)carsWithColor:(NSString *)颜色;”。