Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 委托方法的正确命名约定,除了委托对象外,没有任何参数?_Objective C_Cocoa_Naming Conventions - Fatal编程技术网

Objective c 委托方法的正确命名约定,除了委托对象外,没有任何参数?

Objective c 委托方法的正确命名约定,除了委托对象外,没有任何参数?,objective-c,cocoa,naming-conventions,Objective C,Cocoa,Naming Conventions,我有一个名为ABCCalendarView的类。它需要一个NSCalendar,并从其委托获取此对象。我正试图找出这个委托方法的名称,并且我想适应Cocoa框架的最佳实践 根据我的看法,我应该: 通过标识发送消息的对象的类来启动名称: - (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row; - (BOOL)application:(NSApplication *)sender openFile:(NSString

我有一个名为
ABCCalendarView
的类。它需要一个
NSCalendar
,并从其委托获取此对象。我正试图找出这个委托方法的名称,并且我想适应Cocoa框架的最佳实践

根据我的看法,我应该:

  • 通过标识发送消息的对象的类来启动名称:

    - (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row;
    - (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;
    
    类名省略前缀,第一个字母为小写

  • 除非该方法只有一个参数发送者,否则类名称后面会附加冒号(该参数是对委托对象的引用)

    - (BOOL)applicationOpenUntitledFile:(NSApplication *)sender;
    
这将建议我调用以下方法:

- (NSCalendar *)calendarViewUsesCalendar:(ABCCalendarView *)calendarView;
然而,在Cocoa框架中查看这种情况的实际示例,我可以看到,在这种情况下,使用的实际约定似乎更倾向于将类名放在方法名的末尾。例如:

// UITableViewDataSource has the method:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

// UITableViewDelegate has:
- (NSIndexPath *)indexPathForPreferredFocusedViewInTableView:(UITableView *)tableView

// UIScrollView has:
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
如果我遵循此约定,则建议我调用我的方法:

- (NSCalendar *)calendarForCalendarView:(ABCCalendarView *)calendarView;
为什么苹果的指导方针和他们的实际行动之间似乎存在差异?当创建委托方法时,基本上只是设置调用对象的属性,那么应该遵循什么约定呢?

我认为这在内部有点不一致。有两条“一般规则”规定:

如果该方法返回接收方的属性,请命名该方法 在属性之后

让论点前的单词描述论点

这些以及SDK名称中的先例都支持您的第二个公式:

- (NSCalendar *)calendarForCalendarView:(ABCCalendarView *)calendarView;
我认为SDK名称中有充分的证据表明,您在委托部分找到的规则应该重述。正如你所指出的,它说

通过标识发送消息的对象的类来启动名称


但在我看来,它应该说:“发送调用方的实例作为第一个参数”。这是一种半命名规则,半设计模式。这样,返回代理名称的单参数属性可以是
returnTypeSenderType:
(实际上就是这样)的形式,而不会与文档的其他部分发生冲突。

您的“before”和“after”建议的方法签名是不同的吗?现在,它们都是
日历视图usescalendar:
。我可能会将该方法命名为
-(NSCalendar)calendarForCalendarView:(ABCCalendarView*)aCalendarView…+1@NSGod即使在一开始就有一个类名来检测委托方法可能也有好处,可读性也很重要。(而且
For
远远优于
Uses
)顺便说一句:多年来,我一直希望在这种情况下有方法名前缀。@nsgood yes!谢谢你的指点,我在问题中已经纠正了。我完全同意。如果你只是对最后一条规则稍加不同的解释,那么整个事情就很有意义了。按照你的建议,我将遵循命名惯例(苹果似乎在实践中使用的命名惯例)。谢谢