为什么所有方法在委托中都有相同的名字?

我开始与Swift开发一个简单的应用程序与一个tableView,一个服务器的请求和更多的东西。 我意识到,UITableViewDelegate协议内的每个方法都以相同的方式命名(我想它可能与其他协议相同),并通过改变传递给这些方法的参数(通过这种方式称为“tableView” 。

我想知道为什么苹果会做这样的事情,因为当我尝试从这个协议实现方法,这是有点混乱,因为我不能开始键入“didSele …”只是用“didSelectRowAtIndexPath”自动完成; 相反,我必须键入“tableView”获取所有可用的方法列表,并手动search第二个参数是“didSelectRowAtIndexPath”的那个。

一切工作正常,但只是想知道为什么可以这样做。

非常感谢你的build议:)

PS:有一个关于我在说什么的截图:

该图像显示具有不同参数名称的“tableView”函数列表

Swift被devise为与Objective-C兼容。 毕竟,几乎所有现有的OS X和iOS API都在Objective-C和C中(在这里和那里都有一些C ++代码)。 Swift需要能够使用这些API,从而以某种方式支持大多数Objective-Cfunction。 Objective-C最重要的特性之一就是如何调用方法。

例如,在C中,带有3个参数的函数被调用,如下所示:

foo(1, "bar", 3); 

你不知道论据应该是什么。 所以在Objective-C中,参数与方法名交错。 例如,一个方法的名字可能是fooWithNumber:someString:anotherNumber:它会被调用如:

 [anObject fooWithNumber:1 someString:@"bar" anotherNumber:3]; 

Swift现在试图与这个Objective-C特性兼容。 因此它支持一种命名参数的forms。 Swift中的调用如下所示:

 anObject.foo(number:1, someString:@"bar", anotherNumber:3) 

通常Swift方法的定义是这样写的,所以你不需要明确地命名第一个参数,如:

 anObject.foo(1, someString:@"bar", anotherNumber:3) 

如果你查阅了UITableViewDelegate协议文档并select了Objective-C,你可以看到所有这些方法都以tableView:开头tableView:指定发送者,但从那时开始,他们是非常不同的。 你所引用的列表是Objective-C到Swift命名约定转换的结果。

这只是命名约定。 在Objective-C中是一样的。 你可以看看这个页面 。 没有这些惯例,这将是一个完整的混乱。

方法名称不仅是第一个字,而且是参数的公开名称。

例如,它的方法名不是tableView()而是tableView(_:didSelectRowAtIndexPath:)