gpt4 book ai didi

objective-c - 除了委托(delegate)对象之外没有参数的委托(delegate)方法的正确命名约定?

转载 作者:太空狗 更新时间:2023-10-30 03:54:36 25 4
gpt4 key购买 nike

我有一个名为 ABCCalendarView 的类。它需要一个 NSCalendar,并从它的委托(delegate)中获取这个对象。我正在尝试找出如何调用此委托(delegate)方法,并且我希望符合 Cocoa 框架的最佳实践。

根据 the 'Naming Methods' section of Apple's 'Coding Guidelines for Cocoa' ,我应该:

  • Start the name by identifying the class of the object that’s sending the message:

    - (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row;
    - (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;

    The class name omits the prefix and the first letter is in lowercase.

  • A colon is affixed to the class name (the argument is a reference to the delegating object) unless the method has only one argument, the sender.

    - (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;

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

最佳答案

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

If the method returns an attribute of the receiver, name the method after the attribute.

Make the word before the argument describe the argument.

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

- (NSCalendar *)calendarForCalendarView:(ABCCalendarView *)calendarView;

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

Start the name by identifying the class of the object that’s sending the message

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

关于objective-c - 除了委托(delegate)对象之外没有参数的委托(delegate)方法的正确命名约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37102504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com