除了委托对象之外没有参数的委托方法的正确命名约定?

Cra*_*own 5 cocoa objective-c naming-conventions

我有一个叫做的课ABCCalendarView.它需要一个NSCalendar,并从其委托中获取此对象.我正在尝试解决这个委托方法的问题,我想要适应Cocoa框架的最佳实践.

根据Apple的"可可编码指南"的"命名方法"部分,我应该:

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

    - (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row;
    - (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;
    
    Run Code Online (Sandbox Code Playgroud)

    类名省略前缀,第一个字母为小写.

  • 冒号附加到类名(参数是对委托对象的引用),除非该方法只有一个参数,即发送者.

    - (BOOL)applicationOpenUntitledFile:(NSApplication *)sender;
    
    Run Code Online (Sandbox Code Playgroud)

这表明我应该调用该方法:

- (NSCalendar *)calendarViewUsesCalendar:(ABCCalendarView *)calendarView;
Run Code Online (Sandbox Code Playgroud)

但是,在Cocoa框架中查看这种情况的实际示例,我可以看到使用的实际约定似乎更倾向于在这种情况下将类名放在方法名称的末尾.例如:

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

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

// UIScrollView has:
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
Run Code Online (Sandbox Code Playgroud)

如果我遵循这个建议我应该调用我的方法的约定:

- (NSCalendar *)calendarForCalendarView:(ABCCalendarView *)calendarView;
Run Code Online (Sandbox Code Playgroud)

为什么Apple的指导方针与他们实际做的事情之间似乎存在差异?在创建一个基本上只是设置调用对象属性的委托方法时,应该遵循什么约定?

dan*_*anh 2

我认为规则文件内部略有不一致。有两条“一般规则”规定:

\n\n
\n

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

\n
\n\n

\n\n
\n

让论证之前的词描述论证。

\n
\n\n

这些以及 SDK 名称中的先例都支持您的第二种表述:

\n\n
- (NSCalendar *)calendarForCalendarView:(ABCCalendarView *)calendarView;\n
Run Code Online (Sandbox Code Playgroud)\n\n

我认为 SDK 名称中有足够的证据表明您在委托部分中找到的规则应该重述。正如你所指出的,它说

\n\n
\n

通过标识发送消息的对象的类\xe2\x80\x99 来开始名称

\n
\n\n

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

\n