如果类名很长,则委托方法命名约定?

时间:2012-08-08 00:59:12

标签: objective-c methods delegates naming-conventions

我遇到方法命名问题。我想按照UITableViewDataSource中的方法命名格式:

- (int)numberOfSectionsInTableView:(UITableView *)tableView;

但我的班级名称比“UITableView”长得多 - 它是XYPagedContentScrollView,其中XY是项目的类前缀。我有一个代表协议:

@protocol XYPagedContentScrollViewDelegate <NSObject>
- (CGFloat)defaultPageHeightForPagedContentScrollView:(XYPagedContentScrollView *)pagedContentScrollView;
@end

这个方法名称看起来非常长。我知道这不是一个严格的规则,但我只是想知道有没有办法处理长名称仍然符合Apple的命名惯例?类似的东西:

@protocol XYPagedContentScrollViewDelegate <NSObject>
- (CGFloat)defaultPageHeightForPagedContentScrollView:(XYPagedContentScrollView *)pagedContentSV;
@end

甚至:

@protocol XYPagedContentScrollViewDelegate <NSObject>
- (CGFloat)defaultPageHeightForPCScrollView:(XYPagedContentScrollView *)pagedContentSV;
@end

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

方法的长度不受任何方式的语言限制,因此可以根据需要随意制作。

起初看起来可能看起来很糟糕,但是它越冗长,以后发生冲突的可能性就越小。

我的规则是,如果它看起来可能与另一个方法冲突(特别是如果它是委托方法),则需要更长的名称。

现在,说到这里,不要让名字长得太长,所以它们的长度是100个字符,如下所示:

-(void) fooBarViewController:(FooBarViewController *) controller didTapRightMarginAtPoint:(CGPoint point) ofPage:(NSUInteger) page lengthHeld:(NSTimeInterval) tapLength fingers:(NSUInteger) fingerCount;

相反,请考虑将其包装在事件详细信息的字典中:

-(void fooBarViewController:(FooBarViewController *) controller didTapMargin:(NSDictionary *) eventDetails; 

/* eventDetails should contain the following information:
    which margin?
    touch location
    page index
    touch length
    finger count
 */

这简化了方法签名,并允许接收者只提取他们需要的变量。

答案 1 :(得分:0)

就个人而言,我会选择长形式:这就是自动完成的目的。话虽如此,如果你想缩短它,我会放弃形容词。类似的东西:

@protocol XYPagedContentScrollViewDelegate <NSObject>
- (CGFloat)defaultPageHeightForScrollView:(XYPagedContentScrollView *)pagedContentSV;
@end

我不担心与委托方法的名称冲突,因为如果一个对象是两个具有相同委托方法的不同对象的委托,那么它将使用传递(即调用)对象来区分它们。 (例如,如果您是两个滚动视图的委托,则只需测试传递的视图以查找它正在讨论的滚动视图。)