我从Swift开始,开发一个带有tableView的简单应用程序,对服务器的请求以及更多的东西。我意识到UITableViewDelegate协议中的每个方法都以相同的方式命名(我猜它可能与其他协议相同),并且通过更改传递给这些方法的参数(称为" tableView&#34)来实现差异。顺便说一句。)
我想知道为什么Apple会做这样的事情,因为当我尝试用这个协议实现方法时它有点乱,因为我无法开始输入" didSele ...& #34;只是用" didSelectRowAtIndexPath";自动完成相反,我必须键入" tableView"获取所有可用方法的列表,并手动搜索第二个参数为" didSelectRowAtIndexPath"。
一切都运转正常,但只是想知道为什么可以这样做。
非常感谢你的建议:)
PS:有关于我所说的内容的截图:
答案 0 :(得分:2)
Swift旨在与Objective-C兼容。毕竟,几乎所有现有的OS X和iOS API都在Objective-C和C中(在这里和那里有一些C ++代码)。 Swift需要能够使用这些API,从而以这种或那种方式支持大多数Objective-C功能。 Objective-C最重要的特性之一是如何进行方法调用。
例如,在C中,具有3个参数的函数被调用如下:
foo(1, "bar", 3);
你不知道论据应该是什么。所以在Objective-C中,参数与方法名称交错。例如,方法的名称可能是fooWithNumber:someString:anotherNumber:
,它将被称为:
[anObject fooWithNumber:1 someString:@"bar" anotherNumber:3];
Swift现在尝试与此Objective-C功能兼容。因此它支持一种命名参数。 Swift中的调用看起来像:
anObject.foo(number:1, someString:@"bar", anotherNumber:3)
通常编写Swift方法定义,以便您不需要显式命名第一个参数,例如:
anObject.foo(1, someString:@"bar", anotherNumber:3)
如果您查找UITableViewDelegate protocol documentation并选择Objective-C,您可以看到所有这些方法都以tableView:
开头来指定发件人,但从那时起它们就非常不同了。您引用的列表是从Objective-C转换为Swift命名约定的结果。
答案 1 :(得分:1)
这只是命名约定。在Objective-C中也是如此。您可以查看此page。没有这些惯例,这将是一个完整的混乱。
答案 2 :(得分:1)
方法名称不仅是第一个单词,还是参数的公共名称。
E.g。方法名称不是tableView()
,而是tableView(_:didSelectRowAtIndexPath:)
。