objective-c - 为什么我们需要命名方法参数?

标签 objective-c

我们现在拥有的:

@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/

相关文章:

iphone - 如何在 Xcode 中为 iPhone 应用程序创建我自己的包

iphone - -setCornerRadius 在自定义 View 中找不到

ios - Sprite Kit中的节点数据

iphone - 如何在 iphone 应用程序中捕捉 sigpipe?

iphone - 以编程方式创建 WebView 并在 View 中显示 NSStrings

ios - UIView 容器中的嵌入 TableView

iphone - 使用 Quartz 层是否会降低 UITableView 滚动性能?

ios - RegEx 如何正确使用 OR 管道

ios - 如何删除 UITableViewCell NSIBPrototypingLayoutConstraint 并将我自己的添加到 subview ?

ios - 在 iOS 中从无效 JSON 对象创建有效 JSON 对象