Iphone 在Obj-C中,方法名称后是否可能没有最终参数? 这将有助于一致命名方法,例如,让我们从代码> UITabelVIEW DATABOCE CE 协议:看一些方法名称。 numberOfSectionsInTableView: tableView:heightForHeaderInSection: tableView:viewForHeaderInSection: tableView:heightForFooterInSection: tableView:viewForFooterInSection: tableView:numberOfRowsInSection: tableView:cellForRowAtIndexPath: sectionIndexTitlesForTableView:

Iphone 在Obj-C中,方法名称后是否可能没有最终参数? 这将有助于一致命名方法,例如,让我们从代码> UITabelVIEW DATABOCE CE 协议:看一些方法名称。 numberOfSectionsInTableView: tableView:heightForHeaderInSection: tableView:viewForHeaderInSection: tableView:heightForFooterInSection: tableView:viewForFooterInSection: tableView:numberOfRowsInSection: tableView:cellForRowAtIndexPath: sectionIndexTitlesForTableView:,iphone,objective-c,ipad,Iphone,Objective C,Ipad,请注意第一个和最后一个参数是多么奇怪-它们仍然将UITableView*作为第一个参数,但由于它是唯一的参数,命名约定的一致性被破坏了。如果他们可以这样命名,那就更好了: tableView:numberOfSections tableView:sectionIndexTitles 可以定义这样或类似的方法吗?我试过这些: - (NSUInteger)specialView:(SpecialView*)specialView numberOfThingies; - (NSUInteger)sp

请注意第一个和最后一个参数是多么奇怪-它们仍然将
UITableView*
作为第一个参数,但由于它是唯一的参数,命名约定的一致性被破坏了。如果他们可以这样命名,那就更好了:

tableView:numberOfSections
tableView:sectionIndexTitles
可以定义这样或类似的方法吗?我试过这些:

- (NSUInteger)specialView:(SpecialView*)specialView numberOfThingies;
- (NSUInteger)specialView:(SpecialView*)specialView numberOfThingies:(void)unused;
第一种是理想的,但会导致头文件出错。第二个并不理想(最好在结尾没有冒号),但它在标题中被接受,但我不知道如何调用它。我试过以下几种:

[anObject specialView:aSpecialView numberOfThingies];
[anObject specialView:aSpecialView numberOfThingies:];
[anObject specialView:aSpecialView numberOfThingies:void];
[anObject specialView:aSpecialView numberOfThingies:(void)0];
有没有办法做我想做的事?
是否有人设计了其他合理的命名约定来保持这些方法的一致性?

简短回答:不,在当前版本的Objective-C中不可能。只有在完全没有参数的情况下,才可以结束没有冒号和参数的方法;否则,方法名称的任何部分后面都必须跟一个参数

要执行所需操作,必须遵循
UITableView
使用的模式。以下其中一项是必要的:

- (NSUInteger)specialViewNumberOfThingies:(SpecialView *)specialView;
- (NSUInteger)numberOfThingiesInSpecialView:(SpecialView *)specialView;

恐怕答案是否定的。

你想做的是不可能的。你可以有一个完全不接受参数的函数,但如果你接受任何参数,你就不能在参数之后添加任何内容。

Objective-C的原设计师布拉德·考克斯(Brad Cox)实际上在这里发布了一个关于这一点的答案,所以:好吧,这就是我认为我必须做的事情,不幸的是,我最终还是这样做了。不过谢谢:)