为什么 swift 协议使用 func 重载而不是在具有不同名称的 func 上?

Why swift protocol use func overloading instead on func with different names?

刚开始学习swift,注意到协议UICollectionViewDelegate(https://developer.apple.com/documentation/uikit/uicollectionviewdelegate) 有大约 20 个同名但参数不同的函数。 在 C# 中,我们也使用重载,但我们使用它们以防我们想要做类似的事情,例如:

但在 swift 中,我们对功能完全不同的功能使用相同的功能名称,例如:

所以问题是,为什么他们不使用像这样的函数:

在这种情况下,函数名称实际上告诉我们它将要做什么,并且更容易找到您需要的函数

如果有一些文档说明为什么做出这样的决定,我将不胜感激。

谢谢

所以在 swift 中,函数名称实际上被分解到名称所描述的每个参数旁边。该约定源于 objective-c。

所以你上面显示的那些函数实际上有不同的名称,名称只是被打散了。

所以

collectionView(UICollectionView, didSelectItemAt: IndexPath)

是collectionView:didSelectItemAt:

func collectionView(UICollectionView, targetContentOffsetForProposedContentOffset: CGPoint)

是collectionView:_targetContentOffsetForProposedContentOffset:_

这是一个非常具有描述性的命名约定。请记住,函数的名称被拆分为名称部分所描述的每个参数的旁边。

这跟Objective C的工作方式有关,如果你把这些函数写成选择器,它会像"collectionView:didSelectItemAt:"。这隐含地告诉你它与 collectionView 有关,并且不会与 "tableView:didSelectItemAt:".

混淆

另一方面,如果函数名为 "didSelect:itemAt:",它不会提供任何关于第一个参数是什么的提示,它可以是 tableView、collectionView 或其他任何东西,因为 objective c 没有支持过载,这个会出问题