我们现在拥有的:
@interface BGTest
-(void)someMethodWithName:(NSString *)methodName tag:(NSUInteger)tag path:(NSURL *)path;
@end
为什么不写:
@interface BGTest
-(void)someMethodWithName:(NSString *) tag:(NSUInteger) path:(NSURL *)
@end
据说 ObjC 方法名称应该是自记录的,它们是。如果方法可以用更少的代码变得更清晰,为什么还要编写更多的代码?
我的意思是,为什么我们需要在接口(interface)部分命名方法参数,而不仅仅是在实现中?
最佳答案
您不能在没有参数名称的情况下声明方法,因为在这种情况下,编译器无法判断类型之后的下一个标记是参数名称还是方法名称的一部分。让我在这个例子中证明它:
-(void)testMethodWithParam:(int)a secondParam:(int)b;
这是一个正确的方法声明。现在让我们按照您的建议对其进行编辑:
-(void)testMethodWithParam:(int) secondParam:(int);
我们的意思很明显。我们可以看出,secondParam:
显然是方法名称的一部分。但是 Objective-C 允许我们像这样在空格后写一列:
-(void)testMethodWithParam:(int) secondParam :(int);
这个案例(从我的角度来看)不再那么清楚了。特别是如果我们再删除一个空格:
-(void)testMethodWithParam:(int)secondParam :(int);
现在看起来 secondParam
是第一个参数的名称,并且缺少部分方法名称。
我想,为了更容易解决此类问题,Objective-C 让我们编写了完整的方法规范。
我认为,他们可以稍微更改方法声明格式,以便它允许这样的声明(我喜欢你的想法),但现在是这样。
不过,您可以在@interface
和@implementation
中使用不同的变量名。所以这个:
@interface TestClass : NSObject
-(void)testMethodWithParam:(int)a secondParam:(int)b;
@end
@implementation TestClass
-(void)testMethodWithParam:(int)firstParam secondParam:(int)secondParam
{...}
@end
是合法的。
附言顺便说一句,在这种情况下,@CodaFi 使用下划线作为变量名的想法可能会很好:
@interface TestClass : NSObject
-(void)testMethodWithParam:(int)_ secondParam:(int)_;
@end
有趣的是它可以编译,尽管我对两个变量名都使用了一个下划线。
关于objective-c - 为什么我们需要命名方法参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22872148/