Swift 函数参数:名称和对象类型

Swift function Parameter: Name and Object type

我对函数参数的语法有疑问。以这个函数为例:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
    //code goes here    
}

在函数定义中,每个参数都有一个变量名和一个冒号,后跟一个对象类型。

问题

上面的函数为什么有两个名字? cellForRowAtIndexPathindexPath

我应该使用 indexPath 变量吗?

这里涉及到什么概念?

cellForRowAtIndexPath 是实际 indexPath 参数的 命名 (或外部)参数,也称为内部参数。 named 参数是您在 调用 函数时使用的参数。简而言之,您可以将参数命名为与实际输入变量名称不同的名称。

一个简化的例子

在下面的示例中,我创建了一个带有 named 参数 germanShepherd:

的简单对象
func getDog(barks: Bool, germanShepherd dog: String) {}

然后当我调用我使用的函数时:

getDog(true, germanShepherd: myValue)

在我的简单示例中,named 参数可以帮助消除 "dog" 参数的歧义,就像 cellForRowAtIndexPath 有助于消除歧义一样indexPath 参数。

正在删除命名参数

您还可以选择使用下划线代替命名参数来删除命名参数,如下所示:

func getDog(barks: Bool, _ dog: String) {}

getDog(true, "yes")

当然这一切都可能在 Swift 3!

中发生变化

swift evolution

在 objective-c 中(这个概念也在 swift 中实现)有这些叫做 "named" 参数的东西可以帮助你让你知道你需要什么类型的信息为其提供功能以完成其工作。 indexPath 是您将在函数中使用的实际变量,而 cellForRowAtIndexPath 只不过是一个命名参数,告诉您这里发生了什么。希望对您有所帮助!