我知道不允许使用关键字作为变量名。但有些事情让我开始思考在方法名称中使用关键字。
我最近继承了一个 iOS 应用程序的 XCode 项目,在许多地方我注意到其他编码人员在方法名称中使用了关键字,例如:
- (NSMutableDictionary*) appendData:(NSMutableDictionary*)incomingData for:(NSDictionary*)responseData
和
- (int) findCompensatedIndexOf:(id)searchQuery in:(NSArray*)floorData
在提到的方法中,使用了关键字for
和in
。现在,该应用程序在模拟器和设备上都运行得非常好,这意味着它可以正常工作。另一方面,当在 XCode 中的调用方法的方法名称上使用 CMD + Click
时,没有任何反应。如果您 CMD + 单击一个方法,XCode 会跳转到相关类中的方法,但不是在此处。
现在我明白该应用程序可以正常运行,但在我的脑海深处,我对此有点怀疑。毕竟,操作系统和 IDE 的核心是程序,它们确实认为有些东西是不同的。
言归正传,如果在方法名中使用关键字,究竟会面临什么样的危险(现在,或者将来)?如果它现在有效,是否意味着它会一直有效,或者 future 的更新可能会与这些方法冲突?
注意:我不确定这个问题属于 SO 还是 Programmers .我请求版主做出决定,并在需要时迁移。
最佳答案
首先,Objective-C 是一种文档松散的语言,我不知道是否有当前的正式正式语法,Apple 的最新版本 The Objective-C Programming Language 是 2009 年发布的,过时了。因此,以下所有内容都是(略有根据的)猜测。
似乎没有限制在方法名称中使用等同于关键字的字母序列,而且这不太可能。这是因为方法名称是其部分的串联,并且各个部分不是独立的实体,例如您的两个示例是 appendData:for:
和 findCompensatedIndexOf:in:
,并且对包含与关键字匹配的字母子序列的标识符没有限制,例如forest
是有效的,即使它包含 for
。
您所看到的看起来像是编译器的“功能”,各种接受关键字作为方法名称部分并使自己陷入困惑。如果子部分是关键字,则 CMD+Click 不起作用。例如,给定两种方法:
- (void) anotherMethod:(int)x for:(int)z arg:(int)y;
- (void) anotherMethod:(int)x arg:(int)y;
然后 CMD+Click 调用第一个方法跳转到第二个方法...哎呀!
语法着色也很困惑,但这并不奇怪。
我的建议是向 Apple 提交错误报告,至少这可能会导致正式回应,并避免使用关键字作为方法名称部分 - 不是因为代码不起作用,而是因为 Xcode 变得困惑。
HTH
关于objective-c - 在方法名称中使用关键字的危险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21004071/