为什么 "protocol UITableViewDelegate" 和 swift 语言有这么多同名函数?

Why so many functions with same name in "protocol UITableViewDelegate" with swift language?

swift 语言能否在协议或 class 中允许许多具有相同名称的函数?对不起。谢谢

协议 UITableViewDelegate : NSObjectProtocol, UIScrollViewDelegate {

// Display customization

optional func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)
@availability(iOS, introduced=6.0)
optional func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int)
@availability(iOS, introduced=6.0)
optional func tableView(tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int)
@availability(iOS, introduced=6.0)
optional func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)
@availability(iOS, introduced=6.0)
optional func tableView(tableView: UITableView, didEndDisplayingHeaderView view: UIView, forSection section: Int)
@availability(iOS, introduced=6.0)
optional func tableView(tableView: UITableView, didEndDisplayingFooterView view: UIView, forSection section: Int)

// Variable height support

optional func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
optional func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
optional func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat

这是可能的,因为Swift支持函数重载。您会注意到,尽管这些方法中的每一个都具有相同的名称,但它们接受不同的命名参数。

您可以在自己的代码中利用这一点来提供一致的 API 以支持多种类型。我最近使用此功能扩展 class 的下标运算符以接受我自己的枚举类型,而不仅仅是接受字符串。

就 UITableViewDelegate 而言,它与它的 Objective-C 对应物本质上是相同的,因为 Apple 不想重写 Swift 的所有内容。如果他们为 Swift.

从头开始​​写这个, API 很可能会有所不同