我遇到方法命名问题。我想按照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
有人可以帮忙吗?
答案 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
我不担心与委托方法的名称冲突,因为如果一个对象是两个具有相同委托方法的不同对象的委托,那么它将使用传递(即调用)对象来区分它们。 (例如,如果您是两个滚动视图的委托,则只需测试传递的视图以查找它正在讨论的滚动视图。)