刚开始学习swift并注意到协议UICollectionViewDelegate(https://developer.apple.com/documentation/uikit/uicollectionviewdelegate) 有大约20个具有相同名称但参数不同的函数。 在C#中我们也使用重载,但是我们使用它们以防我们想要做类似的事情:
但是在swift中,我们对执行绝对不同的函数使用相同的函数名称:
所以问题是,为什么他们不使用像这样的函数:
在这种情况下,func名称实际告诉我们它将要做什么,并且更容易找到你需要的功能
如果有一些文件说明为什么做出这样的决定,我会非常感激。
谢谢
答案 0 :(得分:1)
因此在swift中,函数名实际上被分解为名称所描述的每个参数旁边。这个惯例的根源在于objective-c。
所以上面显示的那些函数实际上有不同的名称,名称就是分解。
所以
collectionView(UICollectionView, didSelectItemAt: IndexPath)
是collectionView: didSelectItemAt:
func collectionView(UICollectionView, targetContentOffsetForProposedContentOffset: CGPoint)
是collectionView:_ targetContentOffsetForProposedContentOffset:_
这是一个非常具有描述性的命名惯例。请记住,函数的名称被拆分为名称片段描述的每个参数的旁边。
答案 1 :(得分:1)
它与Objective C的工作方式有关,如果将这些函数编写为选择器,它将类似于"collectionView:didSelectItemAt:"
。这隐含地告诉你它与collectionView有关,并且不会与"tableView:didSelectItemAt:"
混淆。
另一方面,如果名为"didSelect:itemAt:"
的函数,它没有提供关于第一个参数是什么的任何提示,它可以是tableView,collectionView或其他任何东西,因为目标c不支持超载,这将成为一个问题。