ios - 为什么 swift 协议(protocol)使用函数重载而不是不同名称的 func ?

标签 ios swift swift-protocols

刚开始学习 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/

相关文章:

ios - 如何通过 nsuserdefaults 在 swift 中存储自定义数据?

Swift:重构单例模式

Swift - 奇怪的方法签名语法

swift - 我可以制作一个继承自 'View' 的协议(protocol)来显示特定的 'View' 吗?

ios - 使 swift 协议(protocol)符合 Hashable

ios - 将 View Controller 关闭到上一个 View Controller

android - ios, android, windows 移动平台上的蓝牙 sdk

ios - iOS 控制中心是否调用任何 UIApplication 方法。?

c# - Monotouch套接字问题

ios - reloadRowsAtIndexPaths 和滑动操作