为什么在“protocol UITableViewDelegate”中使用swift语言有这么多具有​​相同名称的函数?

时间:2015-01-19 05:59:42

标签: function swift

swift语言是否允许协议或类中具有相同名称的许多函数?原谅我。感谢。

协议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

1 个答案:

答案 0 :(得分:0)

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

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

在UITableViewDelegate的情况下,它基本上与它的Objective-C对应物相同,因为Apple并不想为Swift重写所有东西。如果他们从头开始为Swift编写这个API,那么它很可能会有所不同。