objective-c – 在方法名称中使用关键字的危险

我知道不允许使用关键字作为变量名.但有些事情让我想到在方法名称中使用关键字.

我最近为iOS应用程序继承了一个XCode项目,在很多地方我注意到其他编码器在方法名称中使用了关键字,例如:

- (NSMutableDictionary*) appendData:(NSMutableDictionary*)incomingData for:(NSDictionary*)responseData

- (int) findCompensatedIndexOf:(id)searchQuery in:(NSArray*)floorData

在上述方法中,使用了关键字for和in.现在,应用程序在模拟器和设备上都运行得非常好,这意味着它可以正常工作.另一方面,使用CMD时从XCode中的调用方法单击方法名称,没有任何反应.如果您使用CMD单击某个方法,XCode会跳转到相关类中的方法,但不会在此处.

现在我明白该应用程序运行完全正常,但在我的脑海中,我对此持怀疑态度.毕竟,操作系统和IDE的核心是程序,它们确实感知到不同的东西.

回到这一点,如果他们在方法名称中使用关键字,那么他们(在现在或将来)面临的是什么样的危险?如果它现在有效,它是否意味着它将始终有效,或者未来的更新可能会与这些方法发生冲突?

注意:我不确定这个问题是否属于SO或Programmers.我要求主持人决定,并在需要时进行迁移.

最佳答案 首先,Objective-C是一种松散的文档语言,我不知道是否有一个当前的官方正式语法,而Apple的最新版本的Objective-C编程语言是2009年并且过时了.因此,接下来的所有内容都是(略受过教育的)猜测.

使用等同于方法名称中的关键字的字母序列似乎没有限制,并且不太可能.这是因为方法名称是其部分的串联,并且各个部分不是独立的实体,例如,你的两个例子是appendData:for:和findCompensatedIndexOf:in:,并且对包含与关键字匹配的字母子序列的标识符没有限制,例如:森林是有效的,即使它包含.

您所看到的看起来像编译器的“功能”,各种各样的接受关键字作为方法名称部分,并让自己陷入混乱.如果子部分是关键字,则CMD Click不起作用.例如,给出两种方法:

- (void) anotherMethod:(int)x for:(int)z arg:(int)y;
- (void) anotherMethod:(int)x arg:(int)y;

然后CMD点击第一个方法的调用跳转到第二个方法…哎呀!

语法着色也搞砸了,但这并不太令人惊讶.

我的建议是向Apple提交一个错误报告,至少可能违反正式回复,并避免使用关键字作为方法名称部分 – 不是因为代码不起作用,而是因为Xcode混乱.

HTH

点赞