0

我在方法命名方面遇到问题。我想遵循如下所示的方法命名格式UITableViewDataSource

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

但我的类名比“UITableView”长得多——它XYPagedContentScrollViewXY项目的类前缀。我有一个委托协议:

@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

任何人都可以帮忙吗?

4

2 回答 2

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
 */

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

于 2012-08-08T01:07:20.740 回答
0

就个人而言,我会选择长格式:这就是自动完成的用途。话虽如此,如果您确实想缩短它,我会放弃形容词。就像是:

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

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

于 2012-08-08T01:13:51.233 回答