刚开始学习 swift 并注意到协议(protocol) UICollectionViewDelegate ( https://developer.apple.com/documentation/uikit/uicollectionviewdelegate ) 有大约 20 个名称相同但参数不同的函数。 在 C# 中,我们也使用重载,但我们使用它们是为了防止我们想做类似的事情:
- 获取用户(int id)
- GetUser(字符串用户名)
但在 swift 中,我们对执行完全不同操作的函数使用相同的 func 名称,例如:
- func collectionView(UICollectionView, didSelectItemAt: IndexPath)
- func collectionView(UICollectionView, targetContentOffsetForProposeContentOffset:CGPoint)
所以问题是,为什么他们不使用这样的函数:
- func didSelect(UICollectionView, ItemAt: IndexPath)
- func targetContentOffsetForProposeContentOffset(UICollectionView, 偏移量:CGPoint)
在这种情况下,函数名称实际上告诉我们它将要做什么,并且更容易找到您需要的函数
如果有一些文档说明为什么做出这样的决定,我将非常感激。
谢谢
最佳答案
因此,在 swift 中,函数名称实际上被分解为紧邻该名称所描述的每个参数。该约定源于 Objective-c。
所以你上面展示的那些函数实际上确实有不同的名称,这些名称只是被分解了。
所以
collectionView(UICollectionView, didSelectItemAt: IndexPath)
是collectionView:didSelectItemAt:
func collectionView(UICollectionView, targetContentOffsetForProposedContentOffset: CGPoint)
是collectionView:_ targetContentOffsetForProfusedContentOffset:_
这是一个非常具有描述性的命名约定。请记住,函数的名称被拆分为位于该名称所描述的每个参数旁边。
关于ios - 为什么 swift 协议(protocol)使用函数重载而不是不同名称的 func ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45198704/